开篇,还是我一如既往的风格,不废话,直奔主题。
笔者曾经遇到过我的java程序假死的问题,就是说进程还在,但是不能响应任何服务了,后来使用了这神器——jconsole;关于这个东西我不多做介绍,jconsole就是JDK自带的监控工具,对于不懂各种jvm调优的小白来说绝对神器。
如果你是mac系统那么启动jconsole的方法非常简单,直接在命令行中输入jconsole回车就可以弹出jconsole的图形界面了;如果你是windows电脑就进入到jdk的根目录下在bin文件夹中找到jconsole.exe程序直接打开就行了。打开后的效果如图:
这里有两种模式一种是选择本地的进程,一种是连接远程的java进程(这可是调试服务器问题的神器啊)。然后选择到对应的java进程后点击连接,进入下一个页面如图:(可能会弹出什么不安全的连接都不用管全部过就好了)
然后选择你怀疑有问题的线程,点击检测死锁就可以了,完全傻瓜式的操作。如果有死锁他会定位到具体哪行代码的,如果没有死锁则会提示未检测到死锁如图:
除此之外其实这个工具还有几个看板:概览、内存什么的你都可以切换上面的卡片查看。是不是非常简单?当然了这是最简单最普通的方法能解决死锁检测的问题,更多JVM运行时诊断还是要配合其他专业的命令例如jmap、jstat等。所以说学无止境,只有掌握更多的技术能力才能成为公司的技术担当,成为CTO。涉及jvm调优的技术确实有一定的门槛,跨过去了你就比很多人强!