ある日、Java WebアプリケーションのCPU使用率は最大100%になります。再起動するとインシデントは解決しますが、問題が再発してから数時間後には問題は解決しません。新しいバージョンによって無限ループが導入されたのではないかと疑われましたが、コードやサーバーに変更を加えていません。
kill -QUITを使用していくつかのスレッドダンプを作成し、すべてのスレッドの詳細を調べて比較することで、問題を見つけることができました。すべてのスレッドダンプに1つのスレッド呼び出しスタックが表示されることがわかりました。分析後、データベースで定期的に更新される一部のデータでfalseになることのないwhileループ条件がありました。
Webアプリケーションのいくつかのスレッドダンプの分析は本当に面倒です。
では、実稼働環境でそのような問題を見つけるためのより良い方法やツールを知っていますか?