使用top、jstack在linux服务器中找出cpu占用率高的代码

项目场景:

在一个项目中,后端的代码监控突然预警,接口响应较慢,后来去服务器中才发现服务器的cpu出现了满载的情况,使用率直接到达了100%,后面使用了jstack工具找到系统中出现问题的代码,以此记录一下筛查过程。


问题筛查:

使用top命令,找到占用率高的服务

这里以进程id为7017为例,假设7017的java服务是cpu占用率最高的java服务。
在这里插入图片描述

由于是使用了docker部署,不清楚该java服务是什么服务,可以使用ps命令查看7017进程详情。可以发现是oa_personnel服务。

ps -ef|grep 7017

在这里插入图片描述

使用 docker ps 找到oa_personnel服务对应的容器名,进入该容器。

docker exec -it new_personnel /bin/bash

在这里插入图片描述

进入容器后,使用 top 命令查看当前的java进程id
在这里插入图片描述

使用 jstack 命令输出指定java服务进程id的堆栈信息文件,将文件输出到根目录下,方便查询找出问题。

jstack 7 > dump.txt

使用 top 命令后再输入 H 查看到该容器中的线程信息。记录占用率高的线程id,这里为 77
在这里插入图片描述

在宿主机中,将容器中输出的堆栈信息文件复制到宿主机中指定目录,方便下载后查阅。

docker cp new_personnel:dump.txt /home/dockerMount

将刚刚在容器中记录的cpu占用率高的线程 id=77 转换为16进制得到 4D
在这里插入图片描述

打开堆栈信息文件,转换为十六进制的线程id前加上0X前缀,并查询到对应的堆栈信息。
在这里插入图片描述

解决方法:

后面可以根据堆栈信息找到cpu占用率高的方法,并根据开发人员的经验找出合适的方法处理cpu占用率过高的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值