私は、時には数時間にわたって非常に高いCPU使用率(ほぼ90%)を示すJavaアプリケーション(Webベース)を持っています。 Linux TOP
コマンドがこれを示しています。アプリケーションの再起動時に、問題は解決しません。私が何をしているかのスレッドを見つけるためにスレッドダンプを取るJavaアプリケーションでCPU使用率が高い - なぜですか?
:
だから調査します。
'RUNNABLE'
州にはいくつかのスレッドがあり、いくつかの州にはいくつかあります。繰り返しスレッドダンプを取ると、私は常に
'RUNNABLE'
状態に存在するいくつかのスレッドを参照してください。だから、彼らは犯人のように見えます。
しかし、どのスレッドがCPUをホッギングしているのか、または無限ループに入っている(それによってCPUの使用率が高くなっている)のかはわかりません。
問題のコードは何も記録していない可能性があるので、ログは必ずしも役立つとは限りません。
どのように調査しますか - アプリケーションまたはスレッドのどの部分がCPU使用率を高めていますか? - 他のアイデア?
すでにプロファイラを試してみましたか? – andreapier
あなたのスレッドダンプは、これらのRunnableスレッドがスレッドダンプ中のコードのどこにあるかを示す必要があります。あなたはあなたのコード内を見る必要があります。 IIRCの「実行可能」スレッドはI/Oを待っていてCPUを占有していない可能性がありますが、それは早いですし、私はまだコーヒーを看護しています。 –
andreapier> Prod環境ではプロファイラを使用できないかもしれませんが、ProfilerはどのスレッドがCPUを使用しているかを教えてくれますか? – Jasper