背景:

收到cpu使用率报警,应用中多台机器cpu使用率高达99%左右。

初步处理:

第一时间重启一台机器,发现使用率恢复正常。陆续重启其它机器,保留一台用于观察分析问题根源。

分析:

  1. 初步观察这台机器的内存监控,网络监控等都基本正常。并且观察近几天的cpu使用率情况,基本都正常,就上截图中时间,突然升高。
  2. 通过堡垒机,连到该机器,top命令,发现确实java进程cpu使用率高达90%多。
  3. top -H -p #pid,进一步观察进程中线程,cpu使用率情况;发现有多个线程,cpu使用率稳定在20%左右。
  4. 通过jstack命令,获取jvm线程堆栈快照文件。
  5. 把线程ID,10进制转16进制,在快照文件中搜索,发现该线程是GC线程。也就是说,cpu使用率高,是由于full gc引起的。
  6. 第一步的时候,只观察了机器的内存监控,忽略了jvm。观察jvm 监控,发现堆内存几乎使用完,在频繁的full gc,但是堆内存释放很少。
  7. Jmap Dump下来jvm快照文件,通过mat分析发现,有一对象占比很大。是Xstream解析xml消息相关的。
  8. 分析应用近期上线,有一个mq消费是xml格式的消息,是用的Xstream解析的,但是每次消息解析,都是新new的Xstream,并且为Xstream设置了一个很长的字符串数组属性。

分析总结:

分析由于该消息量非常大,当在中午10点左右的时候,达到峰值,频繁的new大对象,导致新生代young gc回收不过来,直接放入老年代,full gc回收内存释放不够的情况下,频繁的full gc,最终导致cpu使用率达到90%以上。

解决方案:

Xstream修改为单例模式,上线后观察,cpu,jvm等持续保持稳定。

附:Full GC 触发条件:

Full GC的触发条件大致情况有以下几种情况:

1. 程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行;

2. 执行了jmap -histo:live pid命令 //这个会立即触发fullgc;

3. 在执行minor gc的时候进行的一系列检查:

a. 执行Minor GC的时候,JVM会检查老年代中最大连续可用空间是否大于了当前新生代所有对象的总大小。b. 如果大于,则直接执行Minor GC(这个时候执行是没有风险的)。c. 如果小于了,JVM会检查是否开启了空间分配担保机制,如果没有开启则直接改为执行Full GC。d. 如果开启了,则JVM会检查老年代中最大连续可用空间是否大于了历次晋升到老年代中的平均大小,如果小于则执行改为执行Full GC。e. 如果大于则会执行Minor GC,如果Minor GC执行失败则会执行Full GC

4.  使用了大对象 //大对象会直接进入老年代

5.  在程序中长期持有了对象的引用,对象年龄达到指定阈值也会进入老年代

欢迎关注公众号:“架构一线”,定期分享一些实战心得,互联网前沿技术等.

部分机器CPU使用率99% 问题分析相关推荐

  1. (小技巧) 如何让Linux 机器CPU使用率变高

    由于测试需要,需要让机器的cpu使用率变高. 单行命令搞定 for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc ...

  2. 【linux性能优化】CPU使用率过高分析

    最常用什么指标来描述系统的 CPU 性能呢? 可能不是平均负载,也不是 CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示 那么,作 ...

  3. Java 应用程序的 CPU 使用率飙升原因分析

    一. 问题 while 的无限循环是否会导致 CPU 使用率飙升? 频繁的 Young GC 是否会导致 CPU 使用率飙升? 有大量线程的应用程序的 CPU 使用率高吗? CPU 使用率高的应用程序 ...

  4. 后台服务器CPU使用率高 问题分析方法

    一.找出cpu使用率高的进程和线程: a.将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd--sort=%cpu b.对于多线程的服 ...

  5. db2 cpu使用率高问题分析处理

    性能调优步骤 明确问题->收集数据->分析数据->细化.定位问题->优化 环境: db2 9.7, suse linux 11问题:%usr CPU高,大约99%,db2sys ...

  6. Qt Creator分析CPU使用率

    Qt Creator分析CPU使用率 分析CPU使用率 使用性能分析器 分析设备上的内存使用情况 指定性能分析器设置 选择事件类型 选择采样模式和周期 选择通话图模式 设置堆栈快照大小 为Perf添加 ...

  7. 查看cpu使用率_腾讯游戏开发工程师:Linux 机器 CPU 毛刺问题排查

    作者:jasonzxpan,腾讯 IEG 运营开发工程师 本文排查一个Linux 机器 CPU 毛刺问题,排查过程中不变更进程状态.也不会影响线上服务,最后还对 CPU 毛刺带来的风险进行了分析和验证 ...

  8. 如何在.NET应用程序中分析CPU使用率过高的问题

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者:胡安·帕勃罗·希达,JUAN ...

  9. oracle数据库主机CPU使用率高问题的分析及SQL优化

    服务概述 业务系统ORACLE数据库所在主机在近期遇到CPU使用率高的性能问题,工程师及时响应并协助查找了引起数据库性能问题的SQL:后续对此故障原因进行分析及相关建议,详细的故障情况及相关信息分析及 ...

最新文章

  1. 如何提高网站的访问速度
  2. 一级二级标题_考二级造价师有啥要求?
  3. C语言--返回局部变量的地址
  4. 帝国cms微信小程序多语言相亲交友制作记录难点使用的小程序组件分析
  5. [zz] 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图
  6. 新书预告《网络规划设计师考试考点分析与真题详解》
  7. python自定义函数数据分析_Python实现自定义函数的5种常见形式分析
  8. 8次c语言上机作业答案,计算机二级C语言上机题库及答案2017
  9. ckfinder java 源码,关于不再找java使用CKFinder的原因
  10. python显示时间且更新_python显示当前时间
  11. 操作日志的设计小结by大熊
  12. excel宏教程_篇四、CFD Coding之后处理(VBA/EXCEL)
  13. pom中子模块project报红,插件运行Process terminated
  14. 在Mac电脑的输入法中如何开启自动纠正模糊拼音功能?
  15. 数据库——实体联系模型
  16. mysql菜鸟教程 文档_mysql菜鸟教程
  17. ubuntu安装nvidia显卡驱动黑屏nvidia-smi黑屏-显卡故障
  18. 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
  19. 二叉树的五种遍历方式
  20. JVM: PermGen space

热门文章

  1. 移动web开发介绍——浏览器
  2. 学习笔记——面向对象第三天
  3. cesium加载wsm服务
  4. 【HDOJ】1006 Tick and Tick_天涯浪子_新浪博客
  5. 用python画个简易版圣诞树
  6. win10无法播放测试音调怎么办?
  7. Django的信号Signals介绍及使用
  8. 【招聘】周末双休,我在创龙科技等您
  9. Xilinx zynq系列pcie xdma通信(二):下位机PS端
  10. 苹果cms播放页html,苹果CMS播放页被劫持跳转至qp网站的解决方案