Java应用cpu使用率过高

1、jps命令得到pid

image.png

由此命令可以得到应用的pid为2261,Test是我写的无限循环打印程序。

2、top命令得到pid

Java应用cpu使用率过高_第1张图片
image.png

一、top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器,通过top命令可以查看机器的cpu,负载均衡等信息。
二、或者使用top -d 1,top -d 1命令查看 当前占用cpu资源最多的,一般排名第一位肯定是java进程,一般也可能存在多个java进程


Java应用cpu使用率过高_第2张图片
image.png

3、top -Hp pid命令

Java应用cpu使用率过高_第3张图片
image.png

top -H -p 2261含义:

2261是第一步得到的进程的pid。-H 指显示线程,-p 是指定进程。通过该命令可以查看该进程里面的线程的cpu占用情况。可以看到2261的线程占cpu高达64.3%。

ps -mp pid -o THREAD,tid,time命令查看该进程的线程情

-m 所有的线程;
-p表示进程id ;
-o 表示格式化,用户自定义的格式,按照THREAD,tid,time进行格式化

Java应用cpu使用率过高_第4张图片
image.png

可以看到2261的线程占cpu高达62.4%。
时间不同,存在些误差。

4、printf "%x\n" pid

image.png

将cpu占用过高的线程的pid转化为16进制,8d6。

5、jstack (应用所属的用户执行)

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
jstack pid |grep tid -A 30 含义如下:
pid为jps或者top命令得到的进程的pid,tid为第四步得到的线程pid的十六进制数。

Java应用cpu使用率过高_第5张图片
image.png

由此问题为Test.java的第八行。

参考
1、java应用cpu使用率过高问题排查
2、java线上应用cpu占用过高排查

你可能感兴趣的:(Java应用cpu使用率过高)