Java の高CPU使用率
Java における高CPU使用率は、ホットメソッド、GCの動作、ロック競合、スレッドスケジューリングのオーバーヘッドが複合的に絡み合っていることが多いです。
Common symptoms
- JVM プロセスが負荷下で高温状態を維持する
- リクエスト全体でレイテンシが増加する
- スループットに比例せずCPUが上昇する
Likely causes
- 負荷下でのホットコードパス
- 過剰なガベージコレクション
- スレッド数の多すぎやロック競合
Evidence to look for
Java のPIDがCPUを占有している
CPUとともにスレッド数が増加している
サンプリングにより特定の少数メソッドに絞り込まれる
What it usually means
修正方法は、JVM が有用な計算処理、ガベージコレクション、または同期処理のオーバーヘッドのいずれに時間を費やしているかによって異なります。
What to do next
- 1CPUと並行してスレッドおよびGCの動作を確認する
- 2闇雲にチューニングする前にホットメソッドをプロファイルする
- 3スレッド競合とコストの高いメモリ割り当てを削減する
See what's causing your CPU
cpum.ai turns CPU, process, disk, and memory signals into plain-English explanations with evidence.
Open cpum.ai