7

有一天,我们的 Java Web 应用程序的 CPU 使用率达到 100%。重新启动解决了事件但没有解决问题,因为问题在几个小时后又回来了。我们怀疑新版本引入了无限循环,但我们没有对代码或服务器进行任何更改。

我们通过使用 kill -QUIT 进行多个线程转储以及查看和比较每个线程的详细信息,设法找到了问题。我们发现所有线程转储中都出现了一个线程调用堆栈。经过分析,对于数据库中定期更新的某些数据,存在一个永远不会出错的while循环条件。

分析几个web应用的线程转储真的很繁琐。

那么您知道在生产环境中找到此类问题的更好方法或工具吗?

4

3 回答 3

7
于 2011-05-06T17:52:29.613 回答
3

在问题发生之前解决问题!使用FindBugsPMD等静态分析工具作为构建系统的一部分。它不会找到所有东西,但这是一个很好的第一步。

于 2011-05-04T12:47:29.133 回答
1

考虑使用 Cobertura 之类的覆盖工具。它会告诉你,你没有测试这些代码路径。

测试…… 这样可能会变得非常麻烦,因此请尝试通过引入质量测量来避免这种情况。

无论如何,像 VisualVM 这样的工具会给你所有线程的一个很好的概览,所以识别那些工作了很长时间的线程变得相对容易。

于 2011-05-04T12:59:34.123 回答