有一天,我们的 Java Web 应用程序的 CPU 使用率达到 100%。重新启动解决了事件但没有解决问题,因为问题在几个小时后又回来了。我们怀疑新版本引入了无限循环,但我们没有对代码或服务器进行任何更改。
我们通过使用 kill -QUIT 进行多个线程转储以及查看和比较每个线程的详细信息,设法找到了问题。我们发现所有线程转储中都出现了一个线程调用堆栈。经过分析,对于数据库中定期更新的某些数据,存在一个永远不会出错的while循环条件。
分析几个web应用的线程转储真的很繁琐。
那么您知道在生产环境中找到此类问题的更好方法或工具吗?