阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

定位CPU爆满

77次阅读
没有评论

共计 751 个字符,预计需要花费 2 分钟才能阅读完成。

导读 一台机器,CPU100%,如何找到相关服务,如何定位问题代码,今天简单分享下思路。

假设,服务器上部署了若干 Java 站点服务,以及若干 Java 微服务,突然收到运维的 CPU 异常告警。​如何定位是哪个服务进程导致 CPU 过载,哪个线程导致 CPU 过载,哪段代码导致 CPU 过载?

简要步骤如下:

    找到最耗 CPU 的进程;
    找到最耗 CPU 的线程;
    查看堆栈,定位线程在干嘛,定位对应代码;
步骤一、找到最耗 CPU 的进程​

工具:top​

方法:

    执行 top -c,显示进程运行信息列表
    键入 P (大写 p),进程按照 CPU 使用率排序

图示:

定位 CPU 爆满

如上图,最耗 CPU 的进程 PID 为 10765。

步骤二、找到最耗 CPU 的线程​

工具:top​

方法:

    top -Hp 10765,显示一个进程的线程运行信息列表
    键入 P (大写 p),线程按照 CPU 使用率排序

图示:

定位 CPU 爆满

如上图,进程 10765 内,最耗 CPU 的线程 PID 为 10804。

步骤三、查看堆栈定位线程

定位进程在干嘛,定位对应代码首先,将线程 PID 转化为 16 进制。
工具:printf​

方法:printf “%x\n” 10804

图示:

定位 CPU 爆满

如上图,10804 对应的 16 进制是 0x2a34,当然,这一步可以用计算器。

之所以要转化为 16 进制,是因为堆栈里,线程 id 是用 16 进制表示的。

接着,查看堆栈,找到线程在干嘛。

工具:jstack

方法:jstack 10765 | grep ‘0x2a34’ -C5 –color​

    打印进程堆栈
    通过线程 id,过滤得到线程堆栈

图示:

定位 CPU 爆满

如上图,找到了耗 CPU 高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。最后,根据堆栈里的信息,找到对应的代码,搞定!

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计751字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中