JVM调优工具及其相关配置

news2024/11/16 8:52:49

1.查看JVM配置及其应用使用情况

1.1在启动应用中进行测试

1jsp命令的使用

  • 1.jsp查看当前启动的程序
    在这里插入图片描述
  • 2.查看相关堆中对象的使用情况
jmap -histo 16700>./log.txt

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

  • num:序号
  • instances:实例数量
  • bytes:占用空间大小
  • class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],- [[I is a int[][]

2堆信息

1.查看命令

jmap  -heap 16700

在这里插入图片描述

2.堆内存信息

  • 1 .导出命令
jmap -dump:format=b,file=eureka.hprof 16700
  • 2 .可以用jvisualvm命令工具导入该dump文件分析
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.jstack查看锁住的进程

1.查看相关的锁

*程序

package com.jvm;

public class DeadLockTest {
    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");
    }
}

查询相关的进程

jps

在这里插入图片描述
*查询相关的进程id
在这里插入图片描述
通过jvisualvm查看相关的进程
在这里插入图片描述

2.在linux下查看cpu最高堆栈信息

  • 1,使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如19663
    在这里插入图片描述
  • 2,按H,获取每个线程的内存情况
    在这里插入图片描述
  • 3,找到内存和cpu占用最高的线程tid,比如19664
  • 4,转为十六进制得到 0x4cd0,此为线程id的十六进制表示
  • 5,执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法
    在这里插入图片描述
  • 6,查看对应的堆栈信息找出可能存在问题的代码

4.Jinfo

4.1.查看正在运行的Java应用程序的扩展参数

jsp
jinfo -flags 25984

在这里插入图片描述

4.2查看java系统参数

jps
jinfo -sysprops 25984

在这里插入图片描述

5.Jstat

5.1垃圾回收统计

jps
jstat -gc 25984

在这里插入图片描述

  • S0C:第一个幸存区的大小,单位KB
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小(元空间)
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间,单位s
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间,单位s
  • GCT:垃圾回收消耗总时间,单位s

5.2堆内GC统计

jps
jstat -gccapacity 25984

在这里插入图片描述

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • EC:伊甸园区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

5.3新生代垃圾回收统计

jps
jstat -gcnew 10832

在这里插入图片描述

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • TT:对象在新生代存活的次数
  • MTT:对象在新生代存活的最大次数
  • DSS:期望的幸存区大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间

5.4新生代内存统计

jps
jstat -gcnewcapacity 10832

在这里插入图片描述

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0CMX:最大幸存1区大小
  • S0C:当前幸存1区大小
  • S1CMX:最大幸存2区大小
  • S1C:当前幸存2区大小
  • ECMX:最大伊甸园区大小
  • EC:当前伊甸园区大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代回收次数

5.5老年代垃圾回收统计

jps
jstat -gcold 10832

在这里插入图片描述

  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

5.6老年代内存统计

jps
jstat -gcoldcapacity  10832

在这里插入图片描述

  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:老年代大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

5.7元数据空间统计

jps
jstat -gcmetacapacity 10832

在这里插入图片描述

  • MCMN:最小元数据容量
    -MCMX:最大元数据容量
    -MC:当前元数据空间大小
    -CCSMN:最小压缩类空间大小
    -CCSMX:最大压缩类空间大小
    -CCSC:当前压缩类空间大小
    -YGC:年轻代垃圾回收次数
    -FGC:老年代垃圾回收次数
    -FGCT:老年代垃圾回收消耗时间
    -GCT:垃圾回收消耗总时间

5.8各个空间使用比例

jps
jstat -gcutil 10832

在这里插入图片描述

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

6.通过案例分析配置

6.1记录full gc和minor gc日志,可以在日志中记录相关发生full gc和minor gc次数

jstat -gc 10832 2000 10000 >gc.log

在这里插入图片描述
通过这个文件可以分析出,七天内发生发生full gc次数和样GC次数
在这里插入图片描述

6.2 分析当前堆内存的大小

jmap -heap 10832

在这里插入图片描述
我们可以推测下full gc比minor gc还多的原因有哪些?
1、元空间不够导致的多余full gc
2、显示调用System.gc()造成多余的full gc,这种一般线上尽量通过-XX:+DisableExplicitGC参数禁用,如果加上了这个JVM启动参数,那么代码中调用System.gc()没有任何效果
3、老年代空间分配担保机制
在这里插入图片描述

6.3 分析具体代码问题

jmap -histo 10832

在这里插入图片描述
查询具体哪个类有问题,然后对类进行修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录 | 将Word生成的静态网页部署到Github Page

任务描述 使用Word, 可以直接获得 一个静态的网页XXX.html和对应的文件夹XXX.files问题:如何将它托管在github上? 步骤 使用github pages进行托管和发布 步骤1:创建仓库 创建一个新的GitHub仓库:访问 https://github.com 并使用…

matplotlib模块

目录 ❤ 条形图 ❤ 直方图 ❤ 折线图 ❤ 散点图直线图 ❤ 饼图 ❤ 箱型图 ❤ plot函数参数 ❤ 图像标注参数 ❤ Matplolib应用 python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502 …

物联网Lora模块从入门到精通(九)Flash的读取与存储--结题

一、前言 这将是"物联网Lora模块从入门到精通"系列的最后一篇文章,相信各位同僚通过前面八篇文章的分享已经极好的掌握了Lora模块的编程,本文的Flash的读取与存储将是Lora模块开发的最后一块,感谢大家的陪伴与支持! 希望…

SpringCloud(五)

文章目录 负载均衡策略自定义负载均衡策略饥饿加载 负载均衡策略 负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类: 不同规则的含义如下: 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribb…

Redis高级特性之慢查询的基本概念

慢查询概念 作为存储系统,Mysql等等,提供慢查询日志帮助开发和运维人员定位系统存在的满操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预期阈值,便会将这条命令的相关信息。例如发生的时间,耗…

【零基础学JS - 10 】javaScript 中的比较和逻辑运算符

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…

mysql8安装【含mysql安装包】

mysql8安装【含mysql安装包】 安装包等资源安装流程 安装包等资源 安装包下载地址【CSDN免费】:https://download.csdn.net/download/qq_47168235/87881866 如果上面的个下载不了,就通过百度网盘吧 百度网盘连接:https://pan.baidu.com/s/1G…

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR ,输入cmd 2、输入python 3、 输入import torch,然后输入torch.__version__,最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

[LsSDK][tool] ls_syscfg_gui2.1 and ls_syscfg_debug1.0

文章目录 一、简介1.工具的目的2. 更新点下个更新 三、配置文件 一、简介 1.工具的目的 ① 可视化选择IO口功能。 ② 自由配置IO支持的功能。 ③ 适用各类MCU,方便移植和开发。 ④ 功能配置和裁剪(选项-syscfg-待完成–需要适配keil语法有些麻烦&#…

只需一个Prompt,ChatGPT秒变万能导师,轻松学习任意领域知识

AI正在改变我们生活的方方面面,包括我们学习的方式。AI已经证明自己有能力成为我们的助手甚至是老师,帮助我们更有效地获取知识。 拿ChatGPT来说,我们平时有什么问题都可以向它提问,不过想让它更高效的帮助我们,还是需…

C++多态和文件读写

C黑马,每天1.5倍速2个视频(1小时),看到9月1日完成314个视频 目录 🔑多态 🌳基本语法 🌳原理剖析 🌳案例1 -- 计算器类 🌳纯虚函数和抽象类 🌳案例2 --…

区块链世界的大数据入门之zkMapReduce简介

1. 引言 跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂,以帮助安全地扩展基于零知识证明的互操作性。 2. ZK大数据栈 Lagrange Labs 的ZK大数据栈 为一种专有的证明结构,用于在任意动态分布式计算的…

Nginx本地启动前端Vue项目

1.Nginx下载及安装 下载地址:nginx: download 下载stable稳定版本,解压安装包 2.前端项目打包 使用cnpm/npm run serve 或 yarn serve将前端项目打包,记录dist文件夹路径 3.nginx.conf 填写 根目录下conf文件夹有nginx.conf文件&#xf…

Linux——Centos系统中网络连接的三种方式(如何修改VMware的IP地址?)

一、CentOS系统中,三种常见的网络连接模式 我们在前面搭建Linux环境中使用了虚拟机的方式进行(后续也会发文演示用Docker来搭建Linux环境)。在虚拟机中选择安装CentOS系统,然后当时在安装流程的时候选择了NAT模式,但是…

MySQL基础知识:索引

一、索引基础知识 (一)辅助索引/二级索引 叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签( bookmark) (每个索引一颗B树,不包含行记录的全部数据) (二) 回表…

第一章 数据处理篇:数据集读取和构建

说在前面的话 满打满算工作也有三年了,还是没有感觉到自己和刚毕业相比有什么明显的进步。 严格来讲,代码力确实有提升,对各类工具的使用也更加熟练。但是对算法的理解和从0开始编程的能力仍然没有什么长进。归根到底,是因为在工作…

算法学习day18

文章目录 513.找树左下角的值递归迭代 112 .路径总和递归迭代 113.路径总和II递归 106.从中序与后序遍历序列构造二叉树递归 105.从前序与中序遍历序列构造二叉树卡尔递归版本递归优化 总结 513.找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底…

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…

【Flutter】如何给按钮添加圆角 自定义圆角按钮样式

文章目录 一、前言二、创建基本按钮三、如何在 Flutter 中创建圆角按钮四、自定义圆角按钮1.修改按钮颜色2.修改圆角半径 五、完整代码示例六、总结 一、前言 欢迎来到 Flutter 的世界!在这篇文章中,我们将探索 Flutter 的一些基础知识。但是&#xff0…

【IC设计】Synopsys数字IC设计流程

文章目录 数字IC设计流程前端设计RTL编写和HDL仿真逻辑综合门级仿真形式化验证 后端设计数据准备set mw_phys_refs *set link_library *数据准备 (SDC)数据准备 (RC Techfile) set_tlu_plus_files floor planFloorplan阶段的主要内容:常用命令: placemen…