Fra*_*nck 7 java infinite-loop thread-dump
有一天,我们的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运行:
$ <JDK>/bin/java -jar <JDK>/demo/management/JTop/JTop.jar
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其作为JConsole插件运行:
$ <JDK>/bin/jconsole -pluginpath <JDK>/demo/management/JTop/JTop.jar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4959 次 |
| 最近记录: |