美文网首页
线上CPU飙升问题排查

线上CPU飙升问题排查

作者: Mr_三明治 | 来源:发表于2021-06-07 14:37 被阅读0次

1.问题出现场景

       在接手项目后,发现原系统长连接项目的心跳机制,是在Channel注册后,加入到系统的定时任务,然后由服务端主动发起心跳检测。但重新定义线程池,单独执行心跳任务,而且需要每10秒执行一次,当连接数上来时,会因单纯的心跳任务把CPU打满。后面考虑到后端是使用Netty框架,每个Channel都会注册到EventGroup,考虑到可以在每个Channel的注册的线程上,绑定一个10秒执行的异步任务。

       想好就开干,功能一切正常。但发布线上后,到下午,发现服务器监控CPU飙升至80%。平时长连接服务器连接数上了,CPU占用才20%,很明显重构,是导致CPU飙升的根本原因,但这个设计思路是没问题的,所以得排除具体是那个业务逻辑出错了。

2.线上排查

       首先在服务器上执行top命令,得到CPU占用最高的进程,如下图(非异常出现时的截图)

假设此时进程9994占用最高

     获取该进程下cpu占用最高的线程。执行命令:ps -mp 9994 -o THREAD,tid,time

假设此时线程9996占用最高(非出现问题时的截图)

     将线程号转换成16进制,执行:printf "%x\n" 9996

9996转换后十六进制

     使用jstack命令查看堆栈日志,执行:jstack 9994 | grep 270c -A60

打印的当前线程堆栈日志(非出现问题时的截图)

3.问题解决

       通过堆栈日志排除问题,发现占用CPU最高的是Netty的 WorkEventGroup,一直在执行心跳任务,跟踪线上当前连接数,并没有很多。为什么连接数减少,还在一直执行任务?发现,当Channel close后,Channel从绑定的线程上注销,但心跳任务还在继续执行,发现问题后,排查代码,确实,每个Channel在close的时候,没有将其从任务队列中移除,将代码修正后,发布线上,再次监测CPU占用,OK,一切正常。

       任它岁月流逝,前方也定会海阔天空!

相关文章

  • 线上CPU飙升问题排查

    1.问题出现场景 在接手项目后,发现原系统长连接项目的心跳机制,是在Channel注册后,加入到系统的定时任...

  • 线上CPU飙升100%问题排查

    一、引子对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1...

  • 线上cpu飙升排查

    背景 收到线上报警 处理过程 1.执行top命令。确认占用cpu较高的进程top 2.执行top -Hp 进程号 ...

  • 线上CPU飙升100%问题排查,一篇足矣

    一、引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本...

  • 关于内存溢出

    你是否会头疼一下问题 线上CPU突然飙升,领导让你排查,心慌怎么办? 线上发布之后内存升高,出现了FGC怎么分析?...

  • cpu飙升排查

    一、TOP查看 可以看到进程id为8398的进程消耗cpu特别高,然后开始分析进程下所有的线程消耗cpu的情况 二...

  • JVM内存诊断命令和排查工具汇总

    上一篇 <<<服务器CPU飙升为100%问题排查及如何避免[https://www.jianshu.com/p/9...

  • 线上占用CPU过高问题排查

    前言 最近博主在搬砖的时候遇到了线上的一些问题,大致情况是这样的。表象:服务挂了,CPU占用比较高,一直在百分之九...

  • 排查java-CPU使用率高的问题

    记录一次线上排查CPU使用高的问题 使用top命令找到占用CPU高的进程PID 显示线程列表 使用 找到占用CPU...

  • Arthas - Java 线上问题定位处理的终极利器

    前言 在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要...

网友评论

      本文标题:线上CPU飙升问题排查

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