1

Eclipse(Indigo)とJavd1.7xで実行するネットワークスレッドアプリケーションがあります。かなり長い間、アプリケーションの最初の実行により、フロントロードとエンドロードのパフォーマンスが低下することに気づきました。たとえば、アプリケーションをロードしてから、(テストハーネスを使用して)100個のネットワークパケットでヒットした場合などです。最初のいくつかの応答は非常に不安定で、最後のいくつかは非常に不安定です。[編集]アプリケーションをアンロードせずに、テストハーネスを再度実行するだけで、アプリケーションは正常に実行されます。[編集終了]

私はそれを試してみることを決心し、動作をプロファイルするためにVisualVM1.3.5をロードしました。CPU使用率には、実行の開始時に10%から50%を超える明確なスパイクがあります。スパイクの後、すべてが正常に表示され、上記のように、後続の実行にはCPU使用率の主要なスパイクがなく、後続の実行のプロファイルは最初の実行のスパイク間のプロファイルと同じです。スレッドの数が原因であるという証拠はないようですが、わずかに増加しています。ヒープスペースは100MBから200MBに増加しますが、それ以外はすべて正常に見えます。

どんな考えでも大歓迎です。

ありがとう

4

2 に答える 2

0

初めてテストを実行するとき、システム パフォーマンスが不安定になるのはかなり一般的です。これは、オペレーティング システムがライブラリ、JAR ファイル、およびその他のデータをディスクから読み取り、キャッシュに格納するためです。これが完了すると、初回以降のすべての実行がはるかに高速になり、一貫性が向上します。

また、JVM も起動直後は遅くなる傾向があることに注意してください。ホットスポット分析とジャストインタイム コンパイルのため、JVM が特定のワークロードに合わせてバイト コードを最適化する前に、コードを少し実行する必要があります。

于 2012-12-05T06:07:03.613 に答える
0

これは、バンドル クラスまたはサービスの最初のアクセス時にバンドルが遅延して初期化される可能性がある OSGi 環境では一般的です。

-console -consolelog引数を指定して eclipse を開始することで、これがシナリオに当てはまるかどうかを判断できます。

コンソールが開き、アプリケーションがロードされたら、ssコマンドを発行し、どのバンドルが LAZY とマークされているかをメモします。次に、テストを実行してss再度発行し、LAZY バンドルの 1 つが ACTIVE になったかどうかを確認します。その場合、configuration/config.ini ファイルを介してバンドルを強制的に開始できます。これは、IStartup拡張ポイントを介して行うこともできます。

于 2012-12-06T12:54:08.447 に答える