Rootop 服务器运维与web架构

linux下查找java占用cpu高的原因

目的:排查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

作者:Venus

服务器运维与性能优化

评论已关闭。