最近在线的一个服务,经常出现CPU 100%的情况,发生的没有规律,看服务器监控,可以看到有数据进入服务器,然后CPU就100%,这个基本就是同时发生的,一开始判断是不是有人往系统里导入数据造成的,排查了很多次,发现不是这个情况。然后就在网上找资料,进行分析。经过多次查找资料,结合实际情况,对这样的情形处理方式进行总结。

CPU占用100%,根据我的实战经验来说,一共有两种可能:

1.程序进入死循环

2.触发频繁GC

这两种情况是逐步排查的。

第一步,通过 top命令找到占用cpu最高的进程id,然后通过

top -Hp <pid>

找到进程中cpu占用最高的线程id,然后把线程id转化为16进制,通过

jstack pid(进程ID) | grep tid(线程ID 16进制的值) -A 30 > jstack.txt

分析jstack文件,如果jstac.txt文件里面能找到程序中的相关代码,那就基本定位到问题代码了。如果jstack.txt 文件中打印出来的是 gc相关的线程,那基本就是出发频繁GC了。此时开始第二步:

通过

jstat -gcutil <进程ID> 2000 10

查看GC情况

这个图片是出问题前和出问题后我的服务器的情况,从图中明显看出FGC的次数增多了(看懂这个图,需要学习一下GC,Java 内存区域和GC机制 - Leo Chin - 博客园,Java系列笔记(4) - JVM监控与调优 - Daniel·广 - 博客园,这两篇博文顺序阅读),这就是明显的频繁触发GC导致的CPU过高的问题。剩下的步骤就比较简单了,该步骤需要用到一个工具:MemaryAnalyzer,下载链接:MemoryAnalyzer-Java文档类资源-CSDN下载。

通过指令:

jmap -dump:format=b,file=./stack.dump <pid>

生成stack.dump文件,然后下载到本地,打开Memoryanalyzer(如果dump文件超过1G,先去设置MemoryAnalyzer.ini里面的最后一个参数,默认是1024M,这个大小要超过dump文件的大小),file->open file 打开stack.dump文件,加载完成后就如下图:

这里就能找到问题,点击上图中的红色方块的部分,就能定位到相关代码。

找到代码,就自己去分析问题吧。大部分都是自己代码有问题导致的。

如果有其他情况,欢迎在评论区交流。

参考文章:

百度安全验证

Java程序线上运行CPU占用100%的处理方法相关推荐

  1. php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法

    早上帮朋友一台服务器解决了 Mysql cpu 占用 100% 的问题.稍整理了一下,将经验记录在这篇文章里. 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 My ...

  2. 线上服务 CPU 又 100% 啦?一键定位 so easy!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:my.oschina.net/leejun2005/blog ...

  3. 全面Java程序线上故障排查

    文章内容过长,望读者见谅,小编在文末准备了彩蛋 目录 这篇文章是在公司做了不少的线上Java服务故障排查和优化之后的一个总结,可以作为一个工具清单,在分析问题的时候需要有整体思路:全局观,先从系统层面 ...

  4. 线上服务器CPU占用过高?7步带你搞定

    一. 前言 在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势.现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维. 今天壹哥 ...

  5. java程序线上故障排查及解决方案

    cpu占用过高的定位及分析 1. 先用top命令找出占比最高的 2. ps -ef |grep java|grep -v grep或者 jps -l 进一步定位是哪个程序的问题 3.定位到具体线程或代 ...

  6. 记一次线上部署cpu占用大的问题分析

    最近开发了一版kafka消费存redis的代码,部署到客户现场后发现经常跑着跑着cpu占用特别高,把代码里面所有数据库交互操作去除后依然还是会出现该问题. 2.1.微服务kafka配置问题: (1). ...

  7. 一次线上集群CPU占用100%的问题分析过程

    一.前言 最近在搭建Ignite集群的过程中,突然发现线上机器运行一会儿之后CPU占用就会飙升到99%甚至100%.于是开始着手分析并解决了该问题.本文将详细讲解整个问题定位过程. 二.分析过程 1. ...

  8. java线程堆栈nid.tid_java排查一个线上死循环cpu暴涨的过程分析

    问题,打一个页面cpu暴涨,打开一次就涨100%,一会系统就卡的不行了. 排查方法,因为是线上的linux,没有用jvm监控工具rim链接上去. 只好用命令排查: top cpu排序,一个java进程 ...

  9. linux模拟cpu过载,linux下模拟CPU占用100%小程序

    linux下模拟CPU占用100%小程序 来源:https://blog.csdn.net/lin434406218/article/details/54694900 一.单个核100% 代码kill ...

  10. 【程序源代码】 Java的线上面试系统设计与实现

    " 关键字:  "Java的线上面试系统设计与实现 " 01 ---- [总体介绍] Java的线上面试系统设计与实现 本章主要对系统所涉及的相关技术进行了介绍.对系统选 ...

最新文章

  1. TinyML 机器学习简介
  2. python百度语音实时识别成文字_python 语音合成
  3. python用于什么-python用于什么
  4. 【myeclipse】java.lang.NullPointerException at com.genuitec.eclipse.ast.deploy.core.Deployment
  5. html5善于盒模型定位,2个小时上手html+css-003盒模型和定位
  6. yolo使用webcam
  7. VC++调试错误的解决方案
  8. Spring中的refresh()
  9. 天眼查、企查查APP的Authorized值和sign值破解思路记载
  10. DBPedia知识图谱详细介绍
  11. 一帆基金投资报告:下周初股指将选择方向
  12. 【转】钓鱼邮件攻击检测
  13. 上传智能车竞赛比赛成绩
  14. 分布式唯一ID几种生成方案
  15. CSDN上传资源提示:资源上传中断
  16. 最全Pycharm教程(1)——定制外观
  17. 自考计算机英语难度,自考本科商务英语专业真的难吗
  18. 勃仔诞生记:Hubbleverse哈勃元宇宙的起源故事
  19. 程序猿如何变为创业狗?一位刚融到资的程序员含泪述说
  20. ExceptionHandler异常处理

热门文章

  1. Oracle 对 JDK收费和.NET Core 给我们的机遇
  2. 微信公众号H5合成图片长按下载
  3. 操作系统以及Linux起源
  4. 国际人工智能领域著名科学家,受聘同济大学名誉教授
  5. 【机器学习】:朴素贝叶斯
  6. LearnOpenGL 模型加载—Assimp
  7. 内核获取网络设备的网桥接口
  8. SSR pac模式配置和Gitee转移图床失败的尝试
  9. GitHub使用技巧,在线ide编辑代码、在线运行代码、快速查找阅读代码
  10. 支付宝第三方登录具体实现