问题背景

四月中旬生产环境的服务器频繁爆出cpu使用率100%的警告,起初这个业务线不是我负责,也就没有深入了解问题。后边,负责这个业务线的同事离职了,这件事就落在我这边了。然后,开始长达两个月的问题排查和解决方案制定的历程,感叹离职的同事错过了这次学习的机会!

问题分析

在计算机上能引起cpu使用率100%的原因不外乎以下几种:

  • 计算密集型业务,需要进行大量计算导致CPU使用率过高
  • 死循环,代码级别的bug(这种一般在上生产环境之前就应该排查出来,要么是测试的锅,要么是测试的锅,要么是测试的锅)
  • 内存耗尽,JVM频繁执行full gc 最终导致CPU使用率过高
  • 其他原因,比如这次我遇到的使用kafka过程中,不断的进行reblance导致CPU使用率过高

在我们的业务中不存在什么计算,只是进行数据类型的转换、数据关联、数据入库和简单的数据比对。也就不算是计算密集型业务,剩下就只能从剩下的可能性中排查。
当然,如果存在死循环那么CPU使用率应该是一条直线,不会说服务不重启的情况下CPU的使用率降下来。这种可能性也就排除了。
在这里就需要排查 内存!内存!内存!

第一篇 排查服务器内存使用情况

1、top命令查看进程占用内存使用情况

执行命令 top -c 查看进程使用资源情况显示如下:

从这个图中可以看到整个资源使用情况,以及各个进程资源使用情况。当然还可以使用不同的列对进程进行排序:

  • P:按%CPU使用率排行
  • T:按MITE+排行
  • M:按%MEM排行

上面的截图中看不出来进程18069占用内存还是不小的,但是还达不到执行full gc的情况。因为我们设置的jvm内存最大是6g,也还可以,能接受。
当然这个是我们最后调整过的,之前是2g。在后边进行问题排查的时候暂时设置为6g,后来发现这个对于我们的服务来说也算是比较合适的值。

2、jstat查看进程jvm内存使用情况

从上一步中可以看出来CPU使用率高的进程,接下来就是看一下进程的JVM的垃圾回收情况
1、 jstat -gc 进程号 时间间隔 次数

从这个截图可以看到JVM的各个区域的使用情况。当然了,问题已经解决了这边就没有那么高的次数了,在修复之前这个都是十几万的次数,每秒都在增加。
2、jstat -gcutil 进程号 间隔 次数

相比较这个命令现实的更加简洁直观

通过jstat命令排查出来我们的服务full gc频次过高,此时就有必要进行内存分析

3、jmap命令获取堆栈数据

jmap -dump:live,format=b,file=自定义名称.hprof 进程号
通过使用这个命令可以获取当前堆栈数据,然后就是进行内存的分析

4、mat工具分析内存

关于mat使用方式,自行百度在这里不做详细说明。
通过mat工具分析出来大量的对象得不到及时的释放,无形中有点内存泄漏的赶脚

5、代码分析

首先对JVM内存参数调整,2g->6g。先缓解一下报警,也有可能真的是jvm的内存设置太小造成的,至少给排查问题以充足的时间。但是好静不长,只坚持了一个晚上,大量CPU使用率100%报警又来了!

6、代码分析

通过以上四步基本可以判定是大量对象得不到释放,怀疑是代码有问题。进行代码分析
1、mat结果锁定代码位置:mat分析结果表明在使用kafka发送消息的时候大量的producer对象不能及时释放,怀疑和使用的方式有问题。在我们的业务中存在使用CompletionService多线程消费消息再发送消息的功能,其中就有用到take这个方法进行阻塞,每次达到一定批量释放。因此怀疑这个地方有一定的问题!(这里一直有一个疑问没有搞明白,CompletionService在线程执行结束到take执行这段时间,线程引用的对象会不会释放?本人认为不会释放,领导认为会释放,截止目前没有搞清楚)
2、修改代码上线:将CompletionService换成原生的线程池,上线发布!

服务刚上线,马上就尴尬了,CPU使用100%报警马上就来

第二篇 排查线程堆栈

top 命令查看进程的线程信息

top命令获取CPU使用率最高的线程

命令:top

通过这个命令可以看到CPU使用率最高的进程

top -Hp 进程号 查看进程的所有的线程信息

命令:top -Hp 18069

这个命令查看CPU使用率最高的线程

jstack 进程号 | grep -C 上下行数 线程号

命令:jstack 18069 | grep -C 100 2846
由于问题已经解决这里就不展示截图,有问题可以显示出来是那行代码引起的CPU使用过高

通过堆栈信息的排查,可以看出来是kafka一直在进行rebalance引起CPU使用率100%

结语

通过上面一通骚操作基本上排查出来问题。首先是排查内存,频发full gc。在解决full gc之后,发现CPU使用率仍然很高。后来再进行堆栈信息排查才发现是使用kafka消费消息的方案不对引起的。至此CPU使用率100%的问题已经排查出来,具体的解决方案,将在后边的文章中讲述。

记录一次生产CPU使用率100%问题排查相关推荐

  1. Linux生产环境CPU使用率100%,教你定位到具体函数

    在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率,发现监控报了60%的一般就会报警了,到了100%那就惨啦,做我开发的 ...

  2. 转:网御星云防火墙CPU使用率100%的解决方案

    网御星云防火墙CPU使用率100%的解决方案 2018年03月01日 21:46:06 范一刀 阅读数 1482 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文 ...

  3. 网御星云防火墙CPU使用率100%的解决方案

    网御星云防火墙CPU使用率100%解决方案 前几天收到河南某地方性银行出现的故障:网御星云防火墙CPU使用率一直处于100%的状态, 于是前去现场检查设备 发现 1.该防火墙策略做的并不多: 2.该防 ...

  4. linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...

    本文在介绍如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获. 排查 Linux 实例异常 CPU 使用率 100% 使 ...

  5. linux内核3.6版本及以下的bug引发的故障--cpu使用率100%

    现象:          旗舰店运价库cpu使用率100%,load升高,导致后续的请求失败.          重启服务器,cpu.load恢复正常. 触发条件:         (1)linux内 ...

  6. 再谈CPU使用率100%的问题

    曾经我很讨厌那些运维一见到CPU使用率100%的时候就大叫狂跳的样子,我还曾经说过,如果CPU不是拿来用的,难道是用来闲置的吗.   好像我说的话挺有道理.但是,我错了-   不过这也并不意味着运维是 ...

  7. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  8. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  9. mysql查询cpu使用率100%_数据库CPU使用率100% 排查记

    1.背景: 在监控线上数据库的运行是否安全.正常的过程中,cpu 使用率是一个重要的指标,一旦cpu使用率飙升至90%+甚至达到100%,必然会对数据库的正常工作产生影响. 在排查数据库的cpu 飙升 ...

最新文章

  1. 实例分割最新最全面综述:从Mask R-CNN到BlendMask
  2. 参加LinuxCon Japan 2012
  3. zabbix3.0安装
  4. web布局最实用的12条css技巧
  5. scala Akka并发编程介绍
  6. 如果用户的计算机在查询本地Net,网络操作系统管理2448-2
  7. [css] 使用css实现霓虹灯效果
  8. stm32关定时器_STM32F103ZET6的基本定时器
  9. 女子驾驶蔚来汽车被迫停留长安街超1小时 官方回应:司机连续误操作
  10. 【每日算法Day 78】面试经典题:能说出全部四种方法,不录用你都不可能!
  11. 转《腾讯大讲堂11 拍拍ce工作经验分享》
  12. OPPO消息推送服务器,OPPO开放平台消息推送申请教程
  13. ListView嵌套viewpager 头部图片轮换,listview 进行下拉刷新
  14. 编写README文档(Markdown)
  15. 利用人脸微笑数据集训练识别模型,完成对人脸图片微笑识别
  16. Linux全面解析讲解
  17. 35 | 前端安全:如何打造一个可信的前端环境?
  18. 线程【3】- 多线程中PTHREAD_MUTEX_RECURSIVE的理解
  19. 面试题大全-计算机网络
  20. 在TCL网线接口的彩电上看pdf文档的电子书 845电脑的扫描电子电路图扫描仪图

热门文章

  1. hMailServer 配置
  2. 新员工犯错续:解决问题
  3. Linux中Lun是什么,以及和存储卷的区别
  4. Python可以做哪些神奇好玩的事情?
  5. 你对浏览器的兼容性有了解吗?
  6. 使用selenium爬取网页
  7. LCD1602显示总结
  8. Oracle官网账号
  9. 剑指offer—丑数
  10. 软件设计师:计算机系统