2016-12-06 10 views
-2

非常に基本的なJDKの数学APIを使用した同じPOJOコード、永続化レイヤーに関連するものは何もない、POJOだけですが、反復は何百万ラウンドになる可能性があるため、WebsphereからTomcatは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から、各サージ

のためのより多くの時間とタイムスタンプの増加、それはかなり速いので、タイムスタンプは、WebSphereからのlog4jログから

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 

のようなものです

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とWebsphere 8.5。私はlog4jを使用し、私はwebsphereからのログに見ることができます。私はうまくいけば状況を少しクリアすることができます質問を更新しました。ありがとう。 – Dreamer

答えて

3

まず、すべての計算後にログに出力することで、log4jのパフォーマンスをjdk算術APIのパフォーマンス以上に測定しています。それを正しく実行したい場合は、最初にSystem.currentTimeInMillis()を1回、最後を1回として差を印刷します。

第2に、CPUコア(Websphereの場合)より多くのスレッドがあるときにマルチスレッドアプリケーションを実行すると、スレッドをスケジュールして実行する必要があるため、Websphereメッセージがバッチで。

最後に、アプリケーションサーバーのパフォーマンスを測定するためにjdk APIの速度を使用することは、実際には意味がありません。より正確なことは、サーバーの開始時間や秒単位の要求を測定することです(軽量であるため、Tomcatはほぼ確実に小規模なテストで勝つでしょう)。バイクとセミ・トラックを比較するのと同じように、パフォーマンスにはさまざまな強みがあります。

さらに興味深いのは、websphere伝統の新しい軽量バージョンであるtomcatとwebsphere libertyです。

+0

素晴らしいフィードバックをありがとう。実際に私はアプリケーションサーバーのパフォーマンスを評価していないだけで、同じコードをWASでTomcatと同じように高速に動作させる方法を見つけようとしています。 2番目の点に関しては、私はWASを16コアのメモリに16コア搭載しています.1つのアプリケーションがデプロイされていて、POJOの計算が処理されているときにスレッドが1つだけ実行されています。はい、私はLog4Jを使用して、その可能な理由は何ですか?私はwebsphereをよく知っているLog4jではなく、一般的なロギングの友好的ではないですか? – Dreamer

+0

私はWASのLog4jのパフォーマンスに精通していませんが、製品にプラグインするサードパーティ製のソフトウェアなので、他のソフトウェアでLog4jを使用するのと比べてWASの方が遅い理由はわかりません。いずれにしても、最初の段落で私が提案したことは、依然として物を測定するための有効な方法でなければなりません。 –

関連する問題