0

負荷の高いマルチスレッドJavaアプリケーション(クライアントJVMを使用して開始)のプロセッサの使用法について奇妙な読み方をしているようです。

問題は、高負荷の下でも、プロセッサの使用率が99.9%でピークに達することです(Debian Linuxカーネル2.6で最上位のシステムユーティリティを使用して見られます)。サーバーは8コアであるため、これは奇妙に思えます。したがって、高負荷の場合、100%を超える領域に何かが向かうと予想されます。

考慮すべきJVMオプションや、調査する必要のあるシステムパラメータはありますか?

現在、JVMの起動に次のパラメーターを使用しています。

  java -XX:PermSize=128M -XX:MaxPermSize=512M -Xss1024k -Xms512M -Xmx2048M
4

2 に答える 2

1

観察されたプロセッサ使用率の原因として最も可能性が高いのは、アプリケーションに並行処理のボトルネックがあり、平均してシングル スレッドの速度に効果的に制限されていることです。

JVM オプションを変更しても、大きな違いが生じる可能性はほとんどありません。Java パフォーマンス アナライザーを使用してボトルネックがどこにあるかを特定し、それらを解消する方法を特定するために必要なもの。

于 2012-11-26T11:08:39.533 に答える
1

高負荷のマルチスレッド Java アプリケーション (クライアント JVM を使用して開始)。

それは悪い考えのように聞こえます。クライアント VM は、32 ビット システム上のアプレットなどの小型軽量アプリケーション向けに設計されています。Linux、Solaris、および 64 ビット Windows のデフォルトである Server VM を使用することをお勧めします。

サーバーは 8 コアであるため、これは奇妙に思えます。したがって、負荷が高い場合は 100% を超える領域に何かが向かうことが予想されます。

これは、アプリケーションが事実上シングル スレッドであることを意味します。複数のスレッドを使用しようとしている可能性がありますが、独立して動作できない限り、一度に複数のスレッドを実行することはできません。

検討すべき JVM オプションや、調べておくべきシステム パラメータはありますか?

コマンド ライン オプションでは、これを制御できません。スレッドがどのように相互作用するかは完全に異なります。

于 2012-11-26T11:14:19.383 に答える