JVM中如何排查CPU飙高的问题
1、虚拟机对象布局
布局:对象头、实例数据、对齐填充
对象头: Mark Word 8字节,hashcode值、GC分代信息、偏向锁信息;
Class Point 8字节,类指针 ,指向引用对象。
实例数据:成员属性
对象填充:对象字节/8倍数,如果不足的情况下,实现填充。如果实例数据类型为int,可能会有填充数据;如果类型为Integer,没有填充数据,因为Integer会自动填充(由4个字节填充到8个字节)
2、new一个java对象要多少字节?
对象头+实例数据+填充数据
在32位操作系统下,对象头占 8个字节;在64位操作系统下,对象头占16个字节,如果虚拟机压缩对象头,对象头只有12个字节。
如果实例数据类型为int,可能会有填充数据;如果类型为Integer,没有填充数据,因为Integer会自动填充(由4个字节填充到8个字节)
3、如何诊断线程死锁问题
JVM常用虚拟机命令
jps 查看当前服务器上有哪些java进程
jmap -heap 进程id 查看你的堆内存占用情况
软件方式监控:
Jconsole工具 https://www.cnblogs.com/pinp/p/16824269.html
4、如何诊断线上CPU飙升
说明CPU一直在高速运行,什么原因会导致CPU一直在运行呢?高并发、死锁、CAS自旋等。
1)CPU飙升产生背景
① Tomcat高并发的时候,所有线程都是在运行状态,消耗CPU资源;
② 定时任务 死循环 定时跑批量任务;传统项目定时任务与业务逻辑代码在一块,将定时任务与业务逻辑代码分开部署。
③ 云服务器redis 容易被别人用6379端口注入 挖矿程序。Redis端口号不允许在外网访问。
④ 分布式锁(重试机制)。当没有抢到锁的时候,CAS自旋。乐观锁能够保证用户线程一致在用户态,但消耗CPU资源,自旋时需要限制次数。
2)CPU飙升原因
① CAS机制,CAS修改失败会一致不断重试,非常消耗CPU资源。
乐观锁MySQL重试过程,一致在运行状态,非常消耗CPU资源,限制重试次数5-10次或间隔几秒重试。
② 云服务器安装redis ,容易被别人用6379端口注入 挖矿程序,极度消耗CPU资源。Redis端口号不允许在外网访问。
③ Tomcat高并发时,所有线程都在运行状态。使用线程池,设置最大线程、最小线程数
④ 死循环,控制退出循环,防止无限循环。
⑤ 服务被DDOS攻击
5、JVM诊断工具有哪些
1) Jvisualvm工具排查Linux环境下CPU飙高的问题
Jvisualvm位置:%JAVA_HOME%\bin jvisualvm.exe
点击jvisualvm.exe,点击java进程,点击抽样器,点击CPU,线程CPU时间。所以创建线程的时候需要对线程进行命名。
2) Arthas工具排查Linux环境下CPU飙高的问题
在已安装Arthas的环境下,执行top -c命令即可查看前三名。
① 下载arthas:
② javac Test04.java
③ java Test04
④ java -jar arthas-boot.jar
⑤ 选择线程序号并输入,如:1
⑥ top -c (前三名会排序)
JVM中如何排查CPU飙高的问题相关推荐
- JVM优化之系统CPU飙高和GC频繁
本文来说下JVM优化之系统CPU飙高和GC频繁 文章目录 概述 Full GC次数过多 CPU过高 某个线程进入WAITING状态 死锁 本文小结 概述 处理过线上问题的同学基本上都会遇到系统突然运行 ...
- jvm 崩溃日志设置_记一次JVM疯狂GC导致CPU飙高的问题解决
背景 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题.解决问题首先要找到问题的爆发点,对于 ...
- 记一次jvm疯狂gc导致CPU飙高的问题解决
在环境上遇到tomcat频繁gc导致cpu load飙高的问题,本来想自己写一个文章的,看到这个偷懒转载一下. 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高. ...
- 使用arthas排查cpu飙高问题
文章目录 一 1. 下载arthas 2. 启动 3. 选择指定jvm进程 4. 筛选线程 5. 日志分析 一 官方文档:https://arthas.aliyun.com/doc 1. 下载arth ...
- CPU 飙高问题排查和解决方法
摘要 本文档记录了排查 CPU 飙高问题的处理过程和解决方法,从多个方面进行分析和排查. 问题简述 在一个生产环境中发现 CPU 飙高问题,但是无法确定问题的具体原因. 排查方法 使用 jstack ...
- 你要偷偷学会排查线上 CPU 飙高的问题,然后惊艳所有人!
作者 l Hollis 来源 l Hollis(ID:hollischuang) 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入 ...
- oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程
今天测试团队反馈说,服务A的响应很慢,我在想,测试环境也会慢?于是我自己用postman请求了一下接口,真的很慢,竟然要2s左右,正常就50ms左右的. 于是去测试服务器看了一下,发现服务器负载很高, ...
- 面试官:线上服务CPU飙高怎么排查?
用jstack排查 先执行top,找到CPU占用比较高的进程 jstack 进程id > show.txt 找到进程中CPU占用比较高的线程,线程id转为16进制 到show.txt文件中根据线 ...
- 一次FGC导致CPU飙高的排查过程
今天测试团队反馈说,服务A的响应很慢,我在想,测试环境也会慢?于是我自己用postman请求了一下接口,真的很慢,竟然要2s左右,正常就50ms左右的. 于是去测试服务器看了一下,发现服务器负载很高, ...
最新文章
- Swift中GCD与NSOperation相关
- 图解Win7下set命令使用
- 区块链BaaS云服务(33)印度国家支付 Vajra Platform
- 20201125 《计算感知》武老师 第1节课 笔记
- Spring boot配置log4j输出日志
- postman和部署在 SAP 云平台上的SAP UI5应用发送同样的HTTP请求,为何前者成功,后者失败?
- excel emoji php,PHP导出带有emoji表情的文本到excel文件出问题了
- linux每日命令(28):chgrp命令
- 编译原理(龙书):第七章部分题目参考答案
- 华为云UGO正式亮相DTCC 2021,去“O”从此再无后顾之忧
- 需求分析与原型设计———记账软件
- java 读取word模板文件路径_Java 读取Word模板替换内容并另存
- Linux中的虚拟机图形界面安装步骤,批量完成虚拟机硬件配置
- 小时候
觉得爸爸就是天
无所不能~
- .Net Task常见问题
- es 聚合查询 java api_javaAPI操作ES分组聚合
- 关于Java反射获取静态属性值的方式
- MATLAB 的函数
- matlab emi滤波器设计,基于Matlab-GUI的EMI滤波器设计
- Oracle备份恢复(一)
热门文章
- 为知笔记MathJax使用教程
- python9_Python9-列表-day4
- 数字电路基础知识——反相器的相关知识(噪声容限、VTC、转换时间、速度的影响因素、传播延时等)
- ES8新增的常用语法
- 10月各国最新签证及入境政策汇总
- Win10报错 Windows 找不到文件 “(null)“请确定文件名是否正确后,再试一次。
- 美团数据分析岗面试题+解题思路
- 超全的机器学习深度学习资料汇总,惠存!
- 已知每个部门有一个经理,统计输出部门名称、部门总人数、 总工资和部门经理。
- 【mcuclub】四相五线步进电机