CPU100% 问题排查
01 前言
版权声明:本文为CSDN博主「Μr.ηobοdy」的原创文章
原文链接:https://blog.csdn.net/chenlixiao007/article/details/105999034
cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100%;我们应该意识到,cpu运行速度很快(主频非常高),除非密集型耗费cpu的运算,其它类型任务都会在小于时间片的时间内结束。
java cpu100%的排查步骤,基本都是一模一样的,只是命令稍有区别!步骤如下:
- 查找消耗cpu最高的进程PID
- 根据PID查出消耗cpu最高的线程号
- 根据线程号查出对应的java线程,进行处理。
02 Demo模拟
构造一个请求接口,模拟无限产生Person实例。
并进行接口调用:http://172.20.200.250:9563/demoService/demo/test?justDo=true
@RestController
@RequestMapping("demo")
public class DemoController {@GetMapping("test")public boolean test(@RequestParam boolean justDo) {List<Person> persons = new ArrayList<>();int i = 1;if (justDo) {while (true) {persons.add(new Person("张三", i));System.out.println(persons.size());}}return justDo;}
}
03 排查过程
1.使用top
命令找出cpu占用最高的进程
2.使用ps -ef | grep java
或者jps
命令查看cpu占用高的进程是否为java进程:
3.使用top -H -p pid
命令查询此进程的所有线程情况,发现主要有三个线程(PID为29871 29872 29873)占用cup高。-H表示以线程的维度展示,默认以进程维度展示。
4.使用命令jstack pid > pid.tdump
将此进程的线程栈导出到文件并使用cat命令进行查看,pid.tdump文件后缀名随意,通常以tdump结尾。
jstack 29869 > 29869.tdump
cat 29869.tdump
5.将前一步骤查出的3个线程PID从十进制转为十六进制,因为java线程栈文件中的线程id是十六进制。对应分别为29871 -> 0x74af,,29872 -> 0x74b0,29873 -> 0x74b1
。发现此3个线程中有2个为gc线程和1个工作线程。gc线程忙碌表示内存不够用了,要进行内存回收,可能是java内存回收不了,导致一直gc。
6.使用jstat -gcutil pid
命令查看进程的堆情况,发现年轻代中Eden(伊甸园)和old代已使用的占当前容量百分比很高,并且GC频繁。
名字 | 解析 |
---|---|
S0 | 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 |
S1 | 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 |
E | 年轻代中Eden(伊甸园)已使用的占当前容量百分比 |
O | old代已使用的占当前容量百分比 |
M | 元数据区使用比例 |
CCS | 压缩使用比例 |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
7.使用jmap -dump:live,format=b,file=pid.hprof pid
命令导出堆文件,只导出live的对象。文件后缀名可以是任意的,因为它也是二进制的,不过通常以hprof结尾。
8.使用JAVA_HOME/bin/jvisualvm.exe
工具分析快照。载入快照(文件----->载入—>文件类型(堆)):
选择类列表,按照大小排序,找出占用内存最大的类别,发现是Person类。
至此,问题找到原因,原来是在死循环中,不断生产Person实例,并且无法回收,不仅工作线程一直占用cpu,而且导致gc线程忙碌进行回收内存,但是回收不了,最后导致内存不足java.lang.OutOfMemoryError
。
java的bin目录下有很多JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof。
CPU100% 问题排查相关推荐
- 一次线上服务CPU100%的排查过程
前言 突然收到线上服务cpu达到100%的报警短信,于是立即展开排查. 排查过程 理论步骤 一.找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表 键入P (大写p) ...
- springboot token_Springboot接口幂等性基于token实现方案
什么是接口幂等 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中,即f(f(x)) = f(x).简单的来说就是一个操作多次执行产生的结果与一次执行产生的 ...
- 架构师之路17年精选80篇
[架构必备] <互联网架构如何实现"高并发">4W+ <TCP接入层的负载均衡.高可用.扩展性架构设计>2.2W+ <配置中心架构设计演进>1. ...
- 服务器主体信息截图,puppeteer实现线上服务器任意区域截图
整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...
- 【八股文】Linux篇
目录 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 怎么查看当前进程 ps是什么(快照状态,静态的) 基本参数 其他参数 ps显示的内容(默认显示) ...
- 阿里、百度、腾讯Java程序员面经(附带面试题答案)
一定不要在没有面试经验的情况下先面大厂,或者是你想去的公司. 我是3月1日下午三点半在阿里的官网完善的简历,5点电话就过来了.作为一个java coder,阿里是个很好的平台,(当然C 的岗可以好好准 ...
- 2022年5月份面试题集合
没回答上来或者回答的不够好的面试题集合 目录 Java Java基础 接口和抽象类的区别? 深拷贝和浅拷贝区别了解吗? Java集合 介绍一下HashMap? ArrayList的扩容机制是什么样的? ...
- Java学习专栏!全网最牛!
Java基础系列 001:<快速深入理解JDK动态代理原理> 002:<这可能是你见过最全面的HashMap解读> 003:<我敢打赌你一定没用过 Java 中的这个类! ...
- 【这可能不只是一篇面经】- 有话想说的四个月
原文链接:http://www.jianshu.com/p/a6ad23aee955?from=timeline&isappinstalled=0 写了个显眼的标题,就真得说几句有用的话. 5 ...
最新文章
- Oracle创建表管理表
- Tensorflow模型加载与保存、Tensorboard简单使用
- Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】
- php 堵塞 消息队列,PHP的并发处理
- androidq获取文件正式路径_android Q 新特性
- gitlab搭建之互备模式
- linux7系统怎么启动ftp,CentOS 7上启动 vsftp报错解决一例
- EF/SQL/新闻中分页应用
- Grafana 系统可视化监控
- 【转】Java集合间的相互转换
- php 去除 css 格式,PHP清除html格式,去除html、css、js格式
- 神奇宝贝HTML游戏代码,《我的世界》神奇宝贝召唤神兽指令 各神兽召唤代码大全...
- xshell过期/安装教程
- python转html_Python 将文本转换成html的简单示例
- 读书笔记12 《新周刊485期 三商:智商、情商、时间商》
- 线程池java submit,详解线程池execute和submit用法
- 2021强网杯 ezmath writeup
- Spark 开发环境搭建(1)IDEA Gradle的安装部署、使用
- 2018年舆情产品小总结
- jquery.选择器
热门文章
- N次笑N次据说可以让人年轻10岁的故事
- 62套儿童行业响应式Html5儿童慈善机构网站模板儿童公益组织企业官网模板儿童慈善CSS模板下载婴儿树儿童健康食品整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响
- EightCap易汇:美元指数成分组成是什么?美元指数有什么作用?
- 基于Java+MySQL 实现(Web)动态人脸识别的认证识别系统【100010315】
- Boost电路连续、断续、空载状态分析与计算
- svn在idea中的使用
- 原生js-简易点名册实现
- svn服务器端下载linux,Svn linux服务端安装及配置
- Linux——从命令行配置网络、编辑网络配置文件
- 生物制药专业与计算机应用文献,生物制药技术专业求职信范文3篇