`

jconsole 解决线程假死问题

 
阅读更多

      最近在做一个基于多线程的网络抓取,运行过程中总是假死,为此我给线程增加了超时安全退出,但是仍旧没有解决这个问题。后来想了一下,应该有相关的JVM问题定位工具,搜索了一下相关内容,发现jconsole可以考虑尝试一下。

1. jconsole 是什么?

     从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。

2. jconsole 如何启动?

    将java/bin设置到path路径下,在命令窗口>>jconsole 这样就可以启动了

3. jconsole中图形分析-线程

    查看每个线程详细情况,两个指标:总阻止数 总等待数 这两个指标中总等待数如果过于大则表明有可能出问题,而我的应用里面发现这个值已经超过3w,继续查看堆栈跟踪,发现在调用某个方法的时候出现循环调用,记录下代码行数,去源代码中进行分析,发现递归嵌套会导致的死循环,修复此行代码,进行测试,发现线程总等待数趋于平衡,问题解决。

反思:

1.问题发生之前: 写代码的阶段一定要注意必须有测试方法做为支撑

2.问题发生之后:冷静的分析,找到合适的工具,学习图形指标的意义,仔细观察,大胆猜测。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics