如何在java Web应用程序中找到无限循环?

前端之家收集整理的这篇文章主要介绍了如何在java Web应用程序中找到无限循环?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一天,我们的 Java Web应用程序的cpu使用率达到100%.
重启解决了事件但不是问题,因为问题回来几个小时后.
我们怀疑新版本引入了无限循环,但我们没有对代码或服务器进行任何更改.

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

分析Web应用程序的几个线程转储非常繁琐.

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

解决方法

经过一些询问后,我在 Monitoring and Managing Java SE 6 Platform Applications找到了答案:

您可以使用JDK提供的名为JTop的工具来诊断循环线程,该工具将显示每个线程使用的cpu时间:

使用线程名称,您可以通过使用kill -QUIT进行线程转储,在“线程”选项卡中找到此线程的堆栈跟踪.

您现在可以专注于导致无限循环的代码.

PS.:根据http://blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/回答我自己的问题似乎没问题:
[…]
“是的,如果你能在别人面前找到一个好的答案,那就可以回答你自己的问题了.”
[…]

PS.:如果sun.com域名将不再存在:
您可以将JTop作为独立的GUI运行:

$<JDK>/bin/java -jar <JDK>/demo/management/JTop/JTop.jar

或者,您可以将其作为JConsole插件运行:

$<JDK>/bin/jconsole -pluginpath <JDK>/demo/management/JTop/JTop.jar
原文链接:https://www.f2er.com/java/130167.html

猜你在找的Java相关文章