生产事件实录-CPU报警超负载原因查找

专栏链接地址

问题起源

线上环境在无秒杀、营销活动等情况下,出现CPU满载,报警

在这里插入图片描述

  • top命令找到消耗CPU的进程
    注意:下图中的load average是当前服务器的负载均衡,表示了过去5/10/15分钟系统的平均负载值,
    如果三个值相/3*100% >60% ,那么系统的压力重

    uptime 命令也可以看到负载均衡情况的精简版
    例如下图:
    (3.27+3.18+3.53)/3*100%=333%,系统已经超大负载了
    在这里插入图片描述
  • top -Hp 29751(shift+p 按cpu排序,shift+m 按内存排序)找到进程中消耗CPU的线程
    ps -mp 29751 -o THREAD,tid,time也可以
    在这里插入图片描述
  • 得到16进制PID
printf '%x\n' 7065

在这里插入图片描述

  • jstack 29751 |grep 1b99 -A 30 打印当前时刻线程的线程快照,快速定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等
    在这里插入图片描述
  • 定位到代码行数,分析问题。
    在这里插入图片描述
    同事写的统计数据代码、一个装有几十万String的ArrayList去和另一个装有几十万StringArrayList取交集,造成了CPU报警
    后更改了google的工具类com.google.common.collect.Sets
SetView<String> result = Sets.intersection(ImmutableSet.copyOf(activeUserList),ImmutableSet.copyOf(dealUserList));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值