0

我意识到这个问题非常笼统,我正在寻找关于如何协调 linux (RedHat 5) 与 Windows (2008 Server) 上的性能差异的非常一般的输入。我有一个 java 应用程序,它是多个服务的集合,这些服务正在处理来自线路的 netflow 数据包,在完全相同的硬件上,它似乎在 Linux 和 Windows 上以大约一半的容量执行。该应用程序涉及从套接字中提取数据包,并对它们执行一些非常简单的处理,并写出一个压缩的输出文件以供不同的 C++ 应用程序在下游处理。

程序中相关的区域: 从套接字中提取数据包 数据库访问 (mysql 5.1.45) 大量文件 i/o

就优化而言,我几乎没有 linux 经验,如果有人能指出一些在尝试针对不同于 windows 的 linux 进行优化时需要注意的事情,那就太好了。

另外,我不完全确定我还能提供哪些其他信息。就像,我知道我没有提供很多有用的信息,我很感激能指出我正确方向的问题。

是否有任何实用程序提供跨 Linux 和 Windows 的 Java 性能基准测试?

如果问题没有意义,或者我提供的信息太少,甚至无法提出有用的问题,请随意击落我。

谢谢!

编辑:所有 jvm 设置都是相同的(在两种情况下,我们对所涉及的服务都使用完全相同的包装器配置文件)

编辑:我想暂时提出这个问题。除了运行一个基本的分析器和比较结果之外,我已经无法花更多的时间来探索这个了。linux 和 windows 上的结果看起来几乎相同,除了从 NIC 中提取数据包的延迟要大得多。我仍然不明白为什么会这样,或者这是与其他网络状况有关的异常情况。当我有时间再次查看此内容时,我会发布更多内容。

感谢大家的回答!

4

4 回答 4

1

从表面上看,对于相同的硬件,Linux 并不比 Windows 慢。在责怪操作系统(或操作系统上的 Java)之前,我会先看看其他事情:

  • 硬件一样吗?相同的处理器规格?一样的内存?相同的光盘规格?

  • 是不是数据库有问题?Windows 和 Linux 系统是否与同一个数据库实例通信?他们是否以同样的方式与之交谈。如果数据库实例不同,它们的配置是否相同?他们调好了吗?

此类问题的解决方案通常涉及打开性能监控、分析等,并分析系统的行为以查看瓶颈所在。

IMO,在花费(浪费)时间在一些理论(例如)使用 NIO 将解决问题之前,您需要弄清楚瓶颈到底在哪里。


是否有任何实用程序提供跨 Linux 和 Windows 的 Java 性能基准测试?

不是我知道的。

于 2012-07-10T22:57:36.107 回答
1

其他一些可能影响性能的因素: - JVM - 您是否使用相同的供应商 JVM?同一个版本?都是 64 位还是 32 位?- 内核问题:您正在运行自定义内核吗?为您的处理器正确编译?- Linux 上的 CLI 性能工具(top、ntop、iostat、vmstat)告诉您什么?例如,如果 iostat 的 IO 等待时间较长,则可能是驱动器配置方式的问题

有很多因素会影响 Java 性能。从简单开始,向后工作。在我看来,简单的 == 基本统计数据,例如内存页面和 IO 性能。如果我们谈论的是完全相同的代码,那么开始识别差异(显然是操作系统,但还有什么?)

于 2012-07-10T23:44:19.130 回答
1

JVisualVM可能已经在您的目标平台上可用。一个例子可以在这里找到。

于 2012-07-11T00:43:57.967 回答
1

建议:找到一个适合您的场景的分析工具,并在两种环境中运行它。

例如,Eclipse TFTP:

PS:

Affe 对 NIO 的建议是一个很好的建议。诚然,它引出了一个问题,即为什么似乎存在性能差异。但是,如果您还没有使用 NIO,它可以使这两种环境都受益。恕我直言...

于 2012-07-10T22:53:56.247 回答