记一次生产环境线程阻塞的排查

1、使用top命令查找出消耗最多的进程id

$ top      #进程
$ top -H   #线程

2、查看进程中具体线程的资源消耗情况

$ strace -p [线程ID]

3、将线程ID转成16进制

$ printf  "%x\n" [线程ID]

4、查找具体阻塞的代码中的方法

$ jstack [进程ID] |grep [转好的16进制] -A 30

5、其他的一些常用命令

$ htop   #top的升级版,一般需要安装,centos7安装如下
$ yum install epel-release -y
$ yum install htop -y

6、jstat和jmap(此仅限于了解,待做详细总结)

jstat -class [进程ID]  #查看加载了多少类以及对应的信息
jstat -compiler [进程ID] #查看编译的数量, 成功和失败的数量和类型
jstat -gc [进程ID] #查看垃圾回收的统计信息

通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容
如:内存使用情况的汇总、对内存溢出的定位与分析。
jmap -heap [进程ID] #heap内存的使用情况
jmap -histo [进程ID] | more #查看内存中对象数量及大小
jmap -histo:live [进程ID] | more #查看内存中对象活跃数量及大小
jmap -dump:format=b,file=/tmp/dump.dat [进程ID] #将内存使用情况dump到文件中
jhat -port [端口] dump.dat #通过jhat对dump文件进行分析

猜你喜欢

转载自www.cnblogs.com/zhaihongchang/p/11333425.html