生产环境下,如果出现此类问题时,可通过线程的堆栈,查找、定位问题所在。
提供如下三种办法:
一、通过top和jstack
命令解释:
top命令中的pid和jstack中的nid的关系
1、pid是10进制的
2、nid是16进制的
二、通过arthas
官网:https://arthas.aliyun.com/doc/idea-plugin.html
arthas的功能很强大,具体可以查看官网。
解决cpu、死锁之类的问题时,以下命令比较常用
dashboard命令(dashboard 1)
thread命令(thread -n 10)
三、通过show-busy-java-threads
下载地址:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threads
切换到:/opt/abc/useful-scripts-release-2.x/bin
执行命令:./show-busy-java-threads
四、优缺点比较
1、top和jstack ,linux和java的自带命令,不需要额外安装;操作稍微复杂
2、arthas 需要单独启动一个服务;需要熟悉arthas的命令
3、show-busy-java-threads 单独上传一个脚本即可,操作比较简单,是top和jstack的封装