加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:57:06 所属栏目:Java 来源:网络整理
导读:有一天,我们的 Java Web应用程序的CPU使用率达到100%. 重启解决了事件但不是问题,因为问题回来几个小时后. 我们怀疑新版本引入了无限循环,但我们没有对代码或服务器进行任何更改. 我们设法通过使用kill -QUIT进行多次线程转储并查看和比较每个线程详细信息
有一天,我们的 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读