java 进程:cpu占用高、死锁的排查办法

生产环境下,如果出现此类问题时,可通过线程的堆栈,查找、定位问题所在。

提供如下三种办法:

一、通过top和jstack

--查看某个进程的情况:cpu、内存等

top -p 26162

--查看linux中某个进程内部的线程情况

top -H -b -n 1 -p 26162 | head -n 100

命令解释:

top命令:

-p :进程号

-b :以批次的方式执行top

-n :与-b配合使用,表示需要进行几次top命令的输出结果

-H :查看进程的内部的线程情况

head命令:

-n 取前几行

jstack命令: 查看当前线程的代码堆栈

-F:Force a stack dump when 'jstack [-l] pid' does not respond.

-l:Long listing. Prints additional information about locks such as list of owned java.util.concurrent ownable synchronizers.

-m:prints mixed mode (both Java and native C/C++ frames) stack trace.

-h:prints a help message.

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的封装

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容