记一次服务CPU过高排查

16 篇文章 0 订阅
11 篇文章 0 订阅

记一次服务CPU过高排查

今天到公司后,测试报告说页面操作时报网络异常,让我排查一下。
我先去服务上使用

ps -ef | grep <服务名>

查看了一下,发现服务是存在的,然后服务调不通超时可能是服务没响应,资源不够。于是使用top 命令查询

top 5705

键盘输入shift + m根据内存使用率降序排序,发现占用率10%左右,似乎没啥问题,然后输入shift + p根据CPU使用率降序排序查询如下。
在这里插入图片描述
居然CPU高达180%,于是赶紧查看下哪个线程使用率较高

top -H -p 5705

在这里插入图片描述
这里看到有两个线程在84%左右,大概就是这两个线程导致的。将十进制的线程编号转换为十六进制备用:

printf "0x%x\n" 5709
printf "0x%x\n" 5710

得到的结果是

0x164d
0x164e

这个时候应该导出线程信息看下,使用命令

/data/java/bin/jstack -l -F 5705 >> jstack.log

导出线程信息,然后下载文件后搜索 0x164d0x164e,发现是两个GC线程
在这里插入图片描述
应该是内存不够用了,于是看下内存情况,使用以下命令

/data/java/bin/jmap -dump:format=b,file=jmap.hprof 5705

导出内存快照,然后下载下来,用MAT打开
在这里插入图片描述
查看这几个Problem,发现里面是一个线程池中的多个线程在从A数据库导数据到B数据库,一次Load1万条数据,开的线程较多,内存吃满了。内存已经吃满了肯定没法进行了,于是降低导数据同时执行的线程数,重启服务,重新导数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值