2016-12-06 62 views
-2

相同的POJO代码使用非常基本的JDK math api,与持久层无关,只是POJO,但迭代可能会持续数百万轮,所以从Websphere到雄猫可能是10:1。代码是这样的。Websphere的运行速度比Tomcat慢多少原因

for(int i=0;i<200000;i++){ 
    logger.info("calculate result 1"); 
    int result_int1 = new Double(param1_double_left/param1_double_right).intValue(); 
    logger.info("calculate result 2"); 
    int result_int2 = new Double(param2_double_left/param2_double_right).intValue(); 
    logger.info("calculate result 3"); 
    int result_int3 = new Double(param3_double_left/param3_double_right).intValue(); 
    logger.info("calculate result 4"); 
    int result_int4 = new Double(param4_double_left/param4_double_right).intValue(); 
    logger.info("calculate result 5"); 
    int result_int5 = new Double(param5_double_left/param5_double_right).intValue(); 
    //... more calculation with java math like above 
} 

从log4j的日志从Tomcat,这是相当快的,所以时间戳就像

2016-12-05 17:53:31,200 INFO .... <-200 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:53:31,201 INFO .... <-201 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:53:31,202 INFO .... <-202 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:53:31,203 INFO .... <-203 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:53:31,204 INFO .... <-204 
.... another 10 - 20 lines with same timestamp 

从log4j的日志从WebSphere中,时间戳的增加有更多的时间对每个浪涌

2016-12-05 17:55:47,197 INFO .... <-197 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:55:47,212 INFO .... <-212 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:55:47,239 INFO .... <-239 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:55:47,251 INFO .... <-251 
.... another 10 - 20 lines with same timestamp 
2016-12-05 17:55:47,277 INFO .... <-277 
.... another 10 - 20 lines with same timestamp 

所以只是想知道什么可能是关于websphere缓慢的因素。 GC?或其他JVM调优?

+0

您使用的是相同的JDK在每种情况下?你如何衡量时间?您是精确测量for循环还是服务器启动时间被拉入? –

+0

@aguibert是相同的JDK(JDK7)。 Tomcat 6 vs Websphere 8.5。我使用log4j,我可以从websphere中看到日志。我已经更新了这个问题,希望能稍微澄清一下情况。谢谢。 – Dreamer

回答

3

首先,通过在每次计算后打印到日志,测量log4j的性能超过了jdk math API的性能。如果你想要做的是正确的,在年底采取System.currentTimeInMillis()一旦开始和一次打印的区别。其次,如果多线程应用程序在CPU线程数多于CPU线程的情况下运行(这是websphere的情况),线程将需要安排并轮流运行,这就是为什么您会看到批量记录的websphere消息。

最后,使用jdk API来测量应用程序服务器的性能并没有任何意义。一个更精确的事情会被测量服务器启动时或请求/秒(是Tomcat几乎肯定会在小规模测试胜出,因为它是轻量级的)。这就像比较摩托车和半卡车一样,它们在性能上有不同的优势。

一个更有趣的比较是tomcat与websphere liberty,这是传统的websphere的更新更轻量级的版本。

+0

感谢您的好评。实际上,我并没有评估应用服务器的性能,只是试图找到一种方法使得代码在WAS中的运行速度与Tomcat中的一样快。关于第二点,我安装是与16G内存8核CPU,单应用程序部署和刚刚当上述POJO数学正在处理......还是出现在时间戳“批量”差一个单独的线程运行。是的,我使用Log4J是可能的原因?我知道大自然的websphere与Log4j不是很友好,而不是常见的日志记录? – Dreamer

+0

我对WAS上的Log4j性能并不熟悉,但由于它只是插入产品的第三方软件,我不明白为什么它会比使用Log4j与其他软件更慢。无论如何,我在第一段中提出的建议仍然是衡量事情的有效方法。 –

相关问题