如何在Java Web应用程序中找到无限循环?
-
28-10-2019 - |
题
有一天,我们的Java Web应用程序的CPU使用率高达100%。 重新启动可以解决问题,但不能解决问题,因为问题再次出现后几个小时。 我们怀疑新版本引入了无限循环,但没有对代码或服务器进行任何更改。
我们通过使用kill -QUIT进行了多个线程转储并查看并比较了每个线程的详细信息,从而设法找到了问题。 我们发现一个线程调用堆栈出现在所有线程转储中。 经过分析后,对于数据库中定期更新的某些数据,有一个while循环条件永远不会出错。
对Web应用程序的几个线程转储的分析确实很繁琐。
那么您知道在生产环境中找到这种问题的更好的方法或工具吗?
解决方案
经过一些查询,我在监视和管理Java中找到了答案SE 6平台应用程序:
您可以使用JDK提供的名为JTop的工具诊断循环线程,该工具将显示每个线程使用的CPU时间:
使用线程名,可以通过使用kill -QUIT进行线程转储,在“线程”选项卡中找到该线程的堆栈跟踪。
您现在可以专注于导致无限循环的代码。
PS .:似乎可以根据 http:/回答我自己的问题/blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/ : […] “是的,如果您在其他任何人之前都找到了好的答案,那就可以了,甚至鼓励您回答自己的问题。” […]
PS .:如果sun.com域不再存在: 您可以将JTop作为独立的GUI运行: 通用标签
或者,您可以将其作为JConsole插件运行: 通用标签
不隶属于 StackOverflow