美文网首页
记一次cpu负载高的问题定位

记一次cpu负载高的问题定位

作者: _Rondo | 来源:发表于2022-05-18 14:24 被阅读0次
    背景

    生产服务出现请求慢,接口超时,服务器cpu占用高,需要排查定位问题。

    初步定位

    1、根据反馈,初步定位为cpu占用高导致接口响应变慢,接下来需要定位cpu负载高的原因。
    2、使用top命令可以看到java进程cpu占用过高;
    3、接下来使用 top -Hp pid 查询进程内高的线程pid,发现有四个线程cpu占用在80%;

    排查线程

    1、使用printf "x \n" pid依次转换线程id为十六进制;
    2、使用jstack pid |grep tid -A 30 依次查看cpu占用高的线程信息,发现皆为gc 线程判定为频繁fullgc或gc时间过长;

    排查内存

    1、输出gc信息使用jstat -gcutil pid 10000 10 ,得知一次完整的gc需要365秒,判断是有大对象需要回收;
    2、接下里就是定位哪里的引用对象过多的问题,使用jmap -histo:live pid | head -30 发现大对象为原始订单;
    3、根据日志和相关业务人员讨论、代码定位,是因为原始订单表数量激增,相关查询sql未能及时优化,查询到的大对象无法及时回收;

    结论

    原始订单表数据增长大于预期,相关sql未能及时优化,大对象回收时间长,导致cpu占用高。

    相关文章

      网友评论

          本文标题:记一次cpu负载高的问题定位

          本文链接:https://www.haomeiwen.com/subject/uaraurtx.html