在生产环境中有可能出现某java程序使用资源特别严重,这就需要找到该java进程,然后通过进程去找到是哪个线程的问题,这里我们就是用pidstat工具来排查一下
安装pidstat工具
yum -y install sysstat
查看java服务的pid
jps
通过pid查看线程cpu的使用
pidstat -p 1603 1 3 -u -t
#-p指定进程的pid
#1 3 间隔1s输出一次结果,共输出三次
#-u 查找cpu资源使用率
#-t 输出该进程下的所有线程使用率
通过pid查看线程io的使用
pidstat -p 1603 -d -t 1 3
#-d 输出io的使用情况
通过jstack命令也可以分析
jstack -l 1603
线程的tid值转为16进制就是nid值
也可以使用ps命令进行查找分析
先使用top命令查询到使用率最高的进程获取pid
top
在通过 pid查询线程
ps -mp 1603 -o %cpu,tid|awk 'NR!=1 {printf "%s %x\n",$1,$2}'|sort -nr
#使用ps查询指定pid中的线程,并且使用自定义输出的方式输出特定的项,通过awk去除第一行的内容,再将所有的tid值转换为十六进制的值,在通过sort对cpu的使用率进行排序
#这里使用printf,使用%s将对应的值匹配为支付串,%x将匹配的值转换为十六进制,\n用于换行
通过jstack 查询线程的名称
再通过java日志查询对应线程的日志即可