Java应用cpu使用率过高
2019-11-13 本文已影响0人
Mason啊
1、jps命令得到pid

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

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

3、top -Hp pid命令

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进行格式化

可以看到2261的线程占cpu高达62.4%。
时间不同,存在些误差。
4、printf "%x\n" pid

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

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