2016-12-06 61 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與其他軟件更慢。無論如何,我在第一段中提出的建議仍然是衡量事情的有效方法。 –

相關問題