疑难问题Java疑难CPU高定位

Posted 飞翔在天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了疑难问题Java疑难CPU高定位相关的知识,希望对你有一定的参考价值。

 jps/jstack/top/

1   CPU高分析

1.1   说明(root执行)

建议使用root账号执行命令,使用其他账号登录可能会无法看到部分进程信息。

1.2   查看服务进程ID(ps)

命令格式:  ps –ef | grep XXXX

   

1.3   查看机器CPU占用情况(top)

命令格式:  top

执行结果如下,结果会动态刷新

 

 

 

 

%CPU取值说明:以347949为例,58.7%并不是类似Windows的整体CPU占用率。CPU通常是多核,命令执行机器是8核CPU,则CPU全部可用率为8*100%=800%;所以:相对Windows整个机器来说:CPU占用率是 58.7% / 800% = 7.35% 

 

  1. 第一行是任务队列信息

   

  1. 第二、三行为进程和CPU的信息

  

  1. 第四、五行为内存(物理+交换)信息。

 

二.  进程信息

 

 

 

  

1.4   查看指定服务内部线程CPU占用情况(top)

命令格式:  top -p 267396 -H

说明:

1)267396为进程PID信息,参考章节1.2获取;

    2)执行结果会动态刷新

3)执行结果默认只显示下半部分信息,可以按下主键盘区域数字1,增加显示上部信息。

4)左侧PID对应内部线程ID(十进制表示)

 

 

 

 

1.5   安装JDK

通常部署环境没有JDK命令(即没有jstack,jmap等后续命令),需要找到匹配JDK并安装到环境中。

确认方法:可以先通过root切换到根目录查找jstack

命令格式:#find / -name jstack

如果找不到则需要参考章节“如何获取环境匹配的JDK”进行安装。

1.6   使用jstack命令保存堆栈信息(jstack)

命令格式:  jstack 267396 > /tmp/stack1.txt

说明:

    通常机器不会安装jstack信息,需使用到root账号优先查找本机jstack是否存在,否则需要自行安装。

其中nid字段对应16进制的线程ID(对应章节1.4中10进制线程信息)。

  

 比如如下的垃圾回收线程

 

  

1.7   根据待分析TOP线程ID到jstack查找获取线程详细信息

注意: jstack中nid线程ID是十六进制;top命令结果中线程ID是十进制,查询前需要提前转换。

 

 

以上是关于疑难问题Java疑难CPU高定位的主要内容,如果未能解决你的问题,请参考以下文章

直播疑难杂症排查— 延时高

git bisect:让你闭眼都能定位疑难 bug的利器

Git 二分调试法,火速定位疑难Bug!

如何解决直播过程中的直播功耗高问题 | 直播疑难杂症排查

EF6与Mysql疑难问题记录

AirLink疑难问题解决