2012-04-19 7 views
2
  1. oswegoからPooledExecuterを使用しているJavaアプリケーションがあります。
  2. PooledExecuterの使用に関係なく、私のアプリケーションにはスレッドの競合があると強く疑われます。要求には時間がかかります。
  3. 確かにスレッドの競合があるという証拠を収集したいと思います。
  4. いくつかのJVMパラメータを設定する方法はありますか。これは、異なるスレッドが何をしているのか、スレッドの競合を検出するのに役立つ方法を示しています。
+0

oswegoのライブラリは、2004年にJava 5.0で主にマージされました。JVMに最適化された並列ライブラリを試しましたか? –

+2

'jvisualvam'は各スレッドが何をしているかをうまく表示します。 – biziclop

+0

jvisualvm(JDKに付属)+ Yourkitプロファイラは商用ツールです。 –

答えて

1

これを伝えることができるjvmオプションについてはわかりませんが、プロファイラを付けてスレッドが競合(ブロック/待機)しているかどうかを確認し、それらが競合しているロックを確認します。

2

あなたの説明によれば、リソースはシングルスレッドであり、コードは複数のスレッドを効率的に使用できないようです。これが起こっている間にスレッドダンプを取ることでこれを見ることができるはずです。あるスレッドが "本当の"仕事をしているのを見てください。

+1

http://stackoverflow.com/questions/8338131/thread-waiting-on-monitors関連(ダンプと説明を表示) – Fuhrmanator