繁体   English   中英

我正在尝试使用Linux vs Windows上的相同Java代码来识别性能差异。 从表面上看,Linux下的性能要差得多

[英]I'm trying to identify performance differences with the same java code on linux vs windows. On the face of it, performance under linux is much worse

我意识到这个问题是很笼统的,我正在寻找有关如何协调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提取数据包的滞后要大得多。 我仍然不明白为什么会这样,或者这是否与其他网络状况有关。 有时间再看一遍时,我将发布更多内容。

感谢所有的答案!

建议:找到适合您情况的分析工具,然后在两种环境中都运行它。

例如,Eclipse TFTP:

PS:

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

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

  • 硬件是否相同? 处理器规格相同吗? 相同的内存量? 相同的光盘规格?

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

解决此类问题的方法通常包括打开性能监视,性能分析等,并分析系统行为以查看瓶颈所在。

IMO,您需要花一些时间(浪费)一些理论(例如,使用NIO可以解决问题)之前弄清楚瓶颈的真正位置。


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

不是我知道的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM