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飙高的问题相关推荐

  1. JVM优化之系统CPU飙高和GC频繁

    本文来说下JVM优化之系统CPU飙高和GC频繁 文章目录 概述 Full GC次数过多 CPU过高 某个线程进入WAITING状态 死锁 本文小结 概述 处理过线上问题的同学基本上都会遇到系统突然运行 ...

  2. jvm 崩溃日志设置_记一次JVM疯狂GC导致CPU飙高的问题解决

    背景 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题.解决问题首先要找到问题的爆发点,对于 ...

  3. 记一次jvm疯狂gc导致CPU飙高的问题解决

    在环境上遇到tomcat频繁gc导致cpu load飙高的问题,本来想自己写一个文章的,看到这个偷懒转载一下. 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高. ...

  4. 使用arthas排查cpu飙高问题

    文章目录 一 1. 下载arthas 2. 启动 3. 选择指定jvm进程 4. 筛选线程 5. 日志分析 一 官方文档:https://arthas.aliyun.com/doc 1. 下载arth ...

  5. CPU 飙高问题排查和解决方法

    摘要 本文档记录了排查 CPU 飙高问题的处理过程和解决方法,从多个方面进行分析和排查. 问题简述 在一个生产环境中发现 CPU 飙高问题,但是无法确定问题的具体原因. 排查方法 使用 jstack ...

  6. 你要偷偷学会排查线上 CPU 飙高的问题,然后惊艳所有人!

    作者 l Hollis 来源 l Hollis(ID:hollischuang) 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入 ...

  7. oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程

    今天测试团队反馈说,服务A的响应很慢,我在想,测试环境也会慢?于是我自己用postman请求了一下接口,真的很慢,竟然要2s左右,正常就50ms左右的. 于是去测试服务器看了一下,发现服务器负载很高, ...

  8. 面试官:线上服务CPU飙高怎么排查?

    用jstack排查 先执行top,找到CPU占用比较高的进程 jstack 进程id > show.txt 找到进程中CPU占用比较高的线程,线程id转为16进制 到show.txt文件中根据线 ...

  9. 一次FGC导致CPU飙高的排查过程

    今天测试团队反馈说,服务A的响应很慢,我在想,测试环境也会慢?于是我自己用postman请求了一下接口,真的很慢,竟然要2s左右,正常就50ms左右的. 于是去测试服务器看了一下,发现服务器负载很高, ...

最新文章

  1. Swift中GCD与NSOperation相关
  2. 图解Win7下set命令使用
  3. 区块链BaaS云服务(33)印度国家支付 Vajra Platform
  4. 20201125 《计算感知》武老师 第1节课 笔记
  5. Spring boot配置log4j输出日志
  6. postman和部署在 SAP 云平台上的SAP UI5应用发送同样的HTTP请求,为何前者成功,后者失败?
  7. excel emoji php,PHP导出带有emoji表情的文本到excel文件出问题了
  8. linux每日命令(28):chgrp命令
  9. 编译原理(龙书):第七章部分题目参考答案
  10. 华为云UGO正式亮相DTCC 2021,去“O”从此再无后顾之忧
  11. 需求分析与原型设计———记账软件
  12. java 读取word模板文件路径_Java 读取Word模板替换内容并另存
  13. Linux中的虚拟机图形界面安装步骤,批量完成虚拟机硬件配置
  14. 小时候 觉得爸爸就是天 无所不能~
  15. .Net Task常见问题
  16. es 聚合查询 java api_javaAPI操作ES分组聚合
  17. 关于Java反射获取静态属性值的方式
  18. MATLAB 的函数
  19. matlab emi滤波器设计,基于Matlab-GUI的EMI滤波器设计
  20. Oracle备份恢复(一)

热门文章

  1. 为知笔记MathJax使用教程
  2. python9_Python9-列表-day4
  3. 数字电路基础知识——反相器的相关知识(噪声容限、VTC、转换时间、速度的影响因素、传播延时等)
  4. ES8新增的常用语法
  5. 10月各国最新签证及入境政策汇总
  6. Win10报错 Windows 找不到文件 “(null)“请确定文件名是否正确后,再试一次。
  7. 美团数据分析岗面试题+解题思路
  8. 超全的机器学习深度学习资料汇总,惠存!
  9. 已知每个部门有一个经理,统计输出部门名称、部门总人数、 总工资和部门经理。
  10. 【mcuclub】四相五线步进电机