疑难问题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%
- 第一行是任务队列信息
- 第二、三行为进程和CPU的信息
- 第四、五行为内存(物理+交换)信息。
二. 进程信息
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高定位的主要内容,如果未能解决你的问题,请参考以下文章