JVM调优工具详解及调优实战(1)

news2024/11/28 18:57:31

文章目录

    • 1. 前提准备
    • 2. Jmap
    • 3. Jstack
    • 4. Jinfo
    • 5. Jstat(重点)
    • 6. 案例分析

1. 前提准备

任意启动一个web项目,这里我已经启动好了
在这里插入图片描述

2. Jmap

map命令用于生成堆转储快照,有时候也成为heapdump或者dump文件。Jmap不仅仅可以获取dump文件,还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当时用的是那种收集器等。

使用jps查看我们的进程号为99646

jps

在这里插入图片描述

使用jmap查看信息

jmap -histo 99646

在这里插入图片描述

发现终端查看信息比较不清楚,我们可以将输出放入到一个日志文件中

jmap -histo 99646 > ./log.txt

  • num:序号
  • instances:实例数量
  • bytes: 占用空间大小
  • class name: 类名称

查看堆信息

 jmap -heap 99646

导出堆的快照,并可以将快照导入到jvisualvm分析

jmap -dump:format=b,file=eureka.hprof 99646

在这里插入图片描述

3. Jstack

jstack命令用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息。jstack命令可以生成JVM当前时刻的线程快照。线程快照是当前JVM内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

下面模拟程序死锁情况,线程获得锁1然后想获得锁2,线程2获得锁2然后想获得锁1,这样会出现相互等待而产生死锁

public class jvmtestMain {
        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打印线程堆栈信息

 jstack 4276

在这里插入图片描述

4. Jinfo

jinfo是java虚拟机自带的Java配置信息工具,可以实时地查看和调整虚拟机的各项参数。

  • jinfo [ option ] pid 连接到正在运行的进程
  • jinfo [ option ] executable core 连接到核心文件
  • jinfo [ option ] [ servier-id ] remote-hostname-or-IP 要连接到远程DEBUG服务器
jinfo 6123

5. Jstat(重点)

jstat命令可以查看堆内各个部分的使用量就,以及加载类的数量,命令的格式如下:
jstat [-命令选项] [vmid][间隔时间(毫秒)][查询次数]

  • 垃圾回收统计
jstat -gc 21968

在这里插入图片描述

  • S0C:第一个幸存区的大小,单位KB
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小(元空间)
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间,单位s
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间,单位s
  • GCT:垃圾回收消耗总时间,单位s
#表示我们要执行10次这个命令,且每隔1s钟执行1次
jstat -gc 21968 1000 10

6. 案例分析

系统频繁Full GC导致系统卡顿是怎么回事?

  • 机器内核:2核4G
  • JVM内存大小:2G
  • 系统运行时间:7天
  • 期间发生的Full GC次数和耗时:500多次 200多秒
  • 期间发生的Young GC次数和耗时:1万多次, 500多秒

大概算下来每天会发生70次Full GC,平局每小时3次,每次Full GC在400毫秒左右。每天会发生1000多次Young GC,每分钟会发生1次,每次Young GC在50毫秒左右

JVM参数配置如下:

-Xms1536M -Xmx1536M -Xmn512M -Xss256K -XX:SurvivorRatio=6 
-XX:MetaspaceSize=256M 
-XX:MaxMetaspaceSize=256M 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly

在这里插入图片描述

  1. 每分钟发生一次Young GC说明一个问题:每分钟Eden区就会被新对象放满,而触发Young GC,即线程运行每秒会产生6MB对象
  2. 每个小时产生3次Full GC:20分钟一次Full GC,意味着20分钟有700多M对象挪到老年代(CMSInitiatingOccupancyFraction=75 ),这也导致full GC的原因,且full GC把这些移动到老年代的对象基本都杀死了(因为每20分钟做一次full GC),可能的原因如下:
  • 大对象直接进入老年代(这得依据系统实际进行分析)
  • 长期存活对象直接进入老年代
  • 老年代担保机制
  • 动态年龄判断机制

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

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

相关文章

易语言软件定制开发爬虫模拟协议填写自动化办公软件开发多人团队

在当今快速发展的信息化时代,企业对于高效、自动化的软件需求日益增长。而易语言软件定制开发爬虫模拟协议填写自动化办公软件开发多人团队,正是为了满足这一需求而诞生的。 一、团队背景 技术顾问、维:Daxiami6789 易语言软件定制开发爬虫模…

京东数据平台:2023年Q3季度黄金市场数据分析

继9月国内黄金市场持续上涨后,进入10月中下旬后,黄金行情再度反转,多家品牌金饰价格再次突破600元/克,达到611元/克。 今年以来,黄金行情不断走俏,销售市场也有明显增长。根据鲸参谋平台的数据显示&#xf…

geoserver在wms服务查询时中文乱码问题

一、geoserver上的问题 在服务查询时遇到了编码问题,首先就是确认数据存储位置的数据是否采用了GBK编码,排除geoserver的问题。 二、数据上的问题 一般高版本的arcgis或者arcgispro导出来shp的dbf文件在excel里打开中文都是乱码,而这个乱…

瑞明达:聚“追梦”之力,共圆“经济梦”

矢志不渝,笃行不怠,争当“一心一意同国行”的无悔“追梦人”。过往几年,国际形势风高浪急,国内环境复杂多变,在后疫情时代、经济恢复压力等多种超预期的因素冲击下,瑞明达团队全面贯彻落实国家发展政策&…

Graph 部分复习(考试向)

Graph Review OverallPage RankSpam FarmBrandes’ AlgorithmSpectral ClusteringInfuence Maxization- Independent cascade model Overall Page Rank 对于某个互联网网页A来说,该网页PageRank的计算基于以下两个基本假设: 边(Link&#xf…

【信息安全原理】——IP及路由安全(学习笔记)

目录 🕒 1. IPv4协议及其安全性分析🕒 2. IPsec(IP Security)🕘 2.1 IPsec安全策略🕤 2.1.1 安全关联(Security Association, SA)🕤 2.1.2 安全策略(Security…

【数据结构】单双链表超详解!(图解+源码)

🎥 屿小夏 : 个人主页 🔥个人专栏 : 数据结构解析 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️链表概念🌤️链表的分类☁️单向或双向链表☁️带头或不带…

如何规范嵌入式软件开发

键盘的诱惑一直是所有太多嵌入式开发的失败。编写代码很有趣。很好 我们觉得我们正在该项目上取得进展。我们的老板通常不擅长构建固件的细微差别,他们赞成批准,微笑着,因为我们显然正在做有价值的事情。 作为从事基于汇编语言的系统的年轻开…

克隆音-自用教程

硬件准备: 8g以上显存的显卡(3060Ti以上)、16g以上内存、cpu是x86_64架构且支持avx2指令集、电源500w以上、1T的磁盘 free -g看内存 cat /proc/cpuinfo | grep avx2查指令集 资源准备 磁盘扩容 我扩大根目录 sudo lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv …

坏死性凋亡+预后模型+实验,简单思路也能拿下7+。可升级

今天给同学们分享一篇坏死性凋亡预后模型实验的生信文章“Analysis of necroptosis-related prognostic genes and immune infiltration in idiopathic pulmonary fibrosis”,这篇文章于2023年3月27日发表在Front Immunol期刊上,影响因子为7.3。 IPF是一…

Vulkan Buffer 的构造的坑

Vulkan Buffer 的构造的坑 1. DeviceSize 和 memcpy 的大小是数组的数据总量的大小&#xff0c;而不是数组的元素个数 假设你读取模型之后的顶点和索引数组是这样的 std::vector<float> vertices; std::vector<uint16_t> indices;那么你传给 DeviceSize 和 m…

PerfectPixel 插件,前端页面显示优化工具

1.简介 PerfectPixel 插件是一款适用于 Chrome 浏览器的网页前端页面显示优化工具&#xff0c;该插件能够帮助开发人员和标记设计人员在开发时将设计图直接加载至网页中&#xff0c;与已成型的网页进行重叠对比&#xff0c;以规范网页像素精度 作为一款可以优化前端页面显示的…

AI AIgents时代-(六.)OpenAgents

最近Agents框架层出不穷&#xff0c;我们这次选择了OpenAgents&#xff0c;一个声称在Interface和Environment上全方面超越AutoGPT&#xff0c;OpenInterPreter等框架&#x1f92f; 接下来我们逐步拆解OpenAgents的独特之处&#xff01;OpenAgents开发的LLM-powered代理XLang集…

界面组件DevExtreme v23.1 —— UI模板库更新新功能

在DevExtreme在v22.2版本中附带了针对Angular、React和Vue的新UI模板库&#xff0c;这个新的UI模板库包含多个响应式UI模板&#xff0c;您可以将其用作业务应用程序的起点&#xff0c;模板包括类似CRM的布局、仪表盘、身份验证表单等。在这篇文章中&#xff0c;我们将看看在v23…

如何使用NXP RTD技术来完成AUTOSAR与NON-AUTOSAR的结合--以S32K3系列为例

目录 1、基本介绍 2、准备工作 3、从Can Demo开始 3.1 ASR CAN demo 3.1.1 文件概述 3.1.2 配置说明 3.1.3 文件结构 3.2 Non-ASR can通信 4 总结 1、基本介绍 RTD(Real Time Drivers)是NXP实现的一种复杂软件接口抽象&#xff0c;提供给符合AUTOSAR和非AUTOSAR的产品…

140CPU67260 5136-RE-VME 简化与外部分析软件平台的连接

140CPU67260 5136-RE-VME 简化与外部分析软件平台的连接 2022年5月26日-爱默生全球软件、技术和工程领导者今天宣布发布其PACSystems RSTi-EP CPE 200可编程自动化控制器(PAC)。这一新的紧凑型PACs系列通过最大限度地减少对专业软件工程人才的需求&#xff0c;帮助原始设备制…

如何让 Bean 深度感知 Spring 容器

Spring 有一个特点&#xff0c;就是创建出来的 Bean 对容器是无感的&#xff0c;一个 Bean 是怎么样被容器从一个 Class 整成一个 Bean 的&#xff0c;对于 Bean 本身来说是不知道的&#xff0c;当然也不需要知道&#xff0c;也就是 Bean 对容器的存在是无感的。 但是有时候我…

mac matplotlib显示中文

以下默认字体&#xff0c;在mac ventura上测试能成功显示中文&#xff1a; import matplotlib.pyplot as plt import matplotlib#from matplotlib import font_manager #plt.rcParams[font.sans-serif] [Heiti TC]#plt.rcParams[font.sans-serif] [Songti SC]#plt.rcParams[f…

goquery库编写程序

goquery库的爬虫程序&#xff0c;该程序使用Go来爬取视频。。 package main ​ import ("fmt""net/http""net/http/httputil""io/ioutil""log""strings""golang.org/x/net/proxy""golang.org/x/n…

C++失传千年经典系列(二):类

C失传千年经典系列(一):基础语法认知 忙着去耍帅,后期补充完整..............