目的:排查java程序占用cpu高的步骤。
1、首先使用top查到占用cpu最高的java进程 pid
可以看到占cpu最高的是pid为16156的进程,也是java的进程。通过ps查就是我启动的jar包。
2、查此进程的线程
通过ps的 -m (显示线程) -p(pid进程使用的cpu时间)两个参数,配合自定义格式 -o 打印出来线程TID。
由上图可以看到线程16157占用cpu达27%,接下来查找此线程在做什么动作导致这么高。
3、使用jdk自带的 jstack 工具根据进程pid查找并通过线程id(TID)的十六进制过滤堆栈跟踪信息
线程tid转十六进制:
[root@localhost ~]# printf "%x" 16157 3f1d[root@localhost ~]#
16157的十六进制为3f1d
-A -B参数是打印过滤线程十六进制值的上下20行数据。
可以看到是DemoApplication.java中的19行代码导致的cpu占用高。
java代码:
这个地方循环打印数据导致的。记录此过程,便于以后排查问题。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4273.html