实战-用top和jstack命令查找线上CPU消耗过高的线程

前言

在互联网行业中,高并发的业务为常态,作为一名Java高级工程师,线上问题的排查手段和技巧必须熟练,比如某电商团队的某个应用突然CPU超高,导致报警短信和邮件满天飞,如果让你来定位一个问题,并快速消除预警,你该怎么办?其中一点就是如何定位CPU消耗过高的线程,以及如何找到线程正在干的事情。帮助我们快速的定位问题和分析问题。

本文为日常工作中实战性较强的一个问题分析和定位技能。阅读完本文,你将拥有更高层次的问题分析和处理能力。

如何定位CPU高的线程

大体过程如下:

1、用top -H -p <pid>命令找到CPU高的线程ID。
2、用jstack <vmid>命令打印jvm线程堆栈信息。
3、将第1步拿到的线程ID转换为16进制。(可以用命令 printf '%x\n' ID来输出16进制)
4、用转换后的线程ID在线程堆栈信息中查找匹配的nid线程。
5、到此已经找到线程,以及线程栈的详细信息。可以根据这些信息来判断应用当前正在干什么坏事了。

定位Java线程CPU消耗高的线程(top -H命令)

命令:pid为jvm进程号

top -H -p <pid>

作用:列出指定进程下线程的信息,会按CPU的使用占比从大到小排列。

top -H -p <pid>得到的线程堆栈快照信息

上图中列分别代表的意思为:进程中的线程ID、用户名、线程优先级

列名 含义
PID 进程ID
USER linux用户名
PR 线程优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,格式:时:分:秒
COMMAND 命令名/命令行

上面的几个参数中,最关心的是PID、USER、%CPU信息。从上图中可以看到CPU占比最高的排在第1位,线程ID位14153(十六进制为:3749),这个线程就是我们想要的线程。

jstack命令

命令:pid为jvm进程号
作用:获取JVM线程堆栈快照

jstack <pid>
jstack得到的线程堆栈信息

在线程堆栈中提供如下的几个信息:

1、jvm内部的线程ID(tid), 操作系统上对应的线程ID(nid)
2、线程锁的状态,以及线程栈的轨迹信息。

如上图,线程JStack-Test对应的操作系统上的线程ID为0x3749

nid=0x3749

拿到这个ID,是不是有点高兴?有没有发现这个ID就是上一步中用top命令得到的ID?

有了线程堆栈信息,就能够根据线程栈轨迹、线程的状态来判断是否有死锁,线程执行的代码是什么代码。从而在这些信息的基础上进一步帮助我们分析系统的瓶颈、线程死锁、CPU资源消耗等情况。

对于线程堆栈的分析,将另起一篇文章来讲解。
敬请期待!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容