5. JVM调优工具详解及调优实战(这里有我的实战案例预制构件生产管理平台)
创始人
2024-04-16 23:47:25

1. Jmap,Jstack,Jinfo命令详解

1.1 Jmap

此命令可以用来查看内存信息,实例个数以及占用内存大小
jps 先查看有哪些java程序
在这里插入图片描述

  • jmap -histo 16492 > ./log.txt
    在这里插入图片描述
    在这里插入图片描述
  • jmap -heap 16492
    查看堆的信息
    在这里插入图片描述

查看堆年轻代老年代的使用情况

在这里插入图片描述

  • 堆内存dump (导一个快照出来)
    jmap -dump:format=b,file=eureke.hprof 16492

在这里插入图片描述
这里生成了一个文件
在这里插入图片描述
然后我们使用jvisualvm

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
主要看这里

在这里插入图片描述
这里我们可以设置内存溢出自动导入dump文件(内存很大的时候,可能会导不出来)

  1. -XX:+HeapDumpOnOutOfMemoryError
  2. -XX:HeapDumpPath=./(路径)

在这里插入图片描述
这里生成了一个dump文件,将他载入jvisualvm

在这里插入图片描述
这里我们就可以看到user很多

在这里插入图片描述

1.2 Jstack

用Jstack加进程ID查找死锁

代码如下

pubilc class test{private static Object lock1 = new Object();private static Object lock2 = new Object();public static void main(String[] args) {new Thread(()->{synchronized (lock1){try {System.out.println("thread1 begin");Thread.sleep(5000);}catch (InterruptedException e){}synchronized (lock2){System.out.println("thread1 end");}}}).start();new Thread(()->{synchronized (lock2){try {System.out.println("thread2 begin");Thread.sleep(5000);}catch (InterruptedException e){}synchronized (lock1){System.out.println("thread2 end");}}}).start();System.out.println("main thread end");}
}

在这里插入图片描述
这里就死锁了
这个是我死锁的线程
在这里插入图片描述
使用jstack

在这里插入图片描述
死锁的位置

在这里插入图片描述
这里对应代码的行数 有些许区别

在这里插入图片描述
用jvisualvm也可以识别死锁

在这里插入图片描述

  • jstack找出CPU占用最高的堆栈信息
    这里举个例子
package com.qm.boot.web.part.controller;import com.qm.boot.web.admin.entity.SysUser;public class Test {public static  final int initData = 666;public static SysUser sysUser = new SysUser();public int compute(){ //每一个方法对应一块栈帧内存区域int a = 1;int b = 1;int c = (a+b)+10;return c;}public static void main(String[] args) {Test test = new Test();while (true){test.compute();}}}

这个代码不断死循环,一定会让cpu变高

在这里插入图片描述
在这里插入图片描述

1.3Jinfo

查看正在运行的java程序的扩展参数
查看JVM参数

在这里插入图片描述
在这里插入图片描述

1.4 Jstat (用的最多的)

jstat 命令可以查看堆得各部分使用情况,以及加载类的数量

jstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况
在这里插入图片描述

  • YGC :从启动开始执行的youngGc
  • YGCT:从启动开始花费了多少秒
  • FGC:从启动开始发生了多少次fullGc
  • FGCT:从启动开始fullGc花费了多少秒
  • GCT:youngGc和fullGc花费时间之和

jstat -gc 14904 1000 10

在这里插入图片描述
这里我们可以看到元空间基本被使用完了

这里有个问题 我们发现刚刚启动项目 我们发现做了35次minorJc 4次full Gc 那么肯定有问题,
那么我们怎么处理一下呢,

首先画一个内存模型

在这里插入图片描述
几乎实在20秒内,这肯定不可以,那么我们处理一下

  • 我估计是开启了动态年轻判断机制,就是s0太小了 每次超过了50% 那么就会想old区域 放入数据,old 放满之后触发fullGC
  • 那么我觉得可以调大新生代的内存 开始占了堆内存的3分之1 ,那么我调成三分之二,然后确实fullGC 没了

在这里插入图片描述

  • 然后我估计为什么频繁的出发了minor Jc ,那么在调大点比例
    这个方法可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5,
    当然开发人员可以通过选项“-XX :SurvivorRatio”调整这个空间比例。比如-XX : SurvivorRatio=8

然后扩大一下内存那么最后变成了

在这里插入图片描述
这是最后的调优参数

-Xmx1024M -Xms1024M -Xmn768M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...