7

ある日、Java WebアプリケーションのCPU使用率は最大100%になります。再起動するとインシデントは解決しますが、問題が再発してから数時間後には問題は解決しません。新しいバージョンによって無限ループが導入されたのではないかと疑われましたが、コードやサーバーに変更を加えていません。

kill -QUITを使用していくつかのスレッドダンプを作成し、すべてのスレッドの詳細を調べて比較することで、問題を見つけることができました。すべてのスレッドダンプに1つのスレッド呼び出しスタックが表示されることがわかりました。分析後、データベースで定期的に更新される一部のデータでfalseになることのないwhileループ条件がありました。

Webアプリケーションのいくつかのスレッドダンプの分析は本当に面倒です。

では、実稼働環境でそのような問題を見つけるためのより良い方法やツールを知っていますか?

4

3 に答える 3

7
于 2011-05-06T17:52:29.613 に答える
3

問題が発生する前に修正してください。ビルドシステムの一部として、FindBugsPMDなどの静的分析ツールを使用します。すべてを見つけることはできませんが、それは良い第一歩です。

于 2011-05-04T12:47:29.133 に答える
1

Coberturaのようなカバレッジツールの使用を考えてください。これらのコードパスをテストしなかったことがわかります。

sthのテスト。このように非常に面倒になる可能性があるので、品質測定を導入してこれを回避するようにしてください。

とにかく、VisualVMのようなツールはすべてのスレッドの概要を提供するので、予想外に長時間動作しているスレッドを比較的簡単に識別できます。

于 2011-05-04T12:59:34.123 に答える