当前位置: 首页 > news >正文

【实战JVM】-实战篇-06-GC调优

文章目录

  • 1 GC调优概述
    • 1.1 调优指标
      • 1.1.1 吞吐量
      • 1.1.2 延迟
      • 1.1.3 内存使用量
  • 2 GC调优方法
    • 2.1 发现问题
      • 2.1.1 jstat工具
      • 2.1.2 visualvm插件
      • 2.1.3 Prometheus+Grafana
      • 2.1.4 GC Viewer
      • 2.1.5 GCeasy
    • 2.2 常见GC模式
      • 2.2.1 正常情况
      • 2.2.2 缓存对象过多
      • 2.2.3 内存泄漏
      • 2.2.4 持续FullGC
      • 2.2.5 元空间不足导致FullGC
    • 2.3 解决GC问题的手段
      • 2.3.1 优化基础JVM参数
        • 2.3.1.1 -Xmx -Xms 堆参数
        • 2.3.1.2 -XX:MaxMetaspaceSize -XX:MetaspaceSize 元空间参数
        • 2.3.1.3 -Xss 虚拟机栈参数
        • 2.3.1.4 不建议设置参数
        • 2.3.1.5 模板
      • 2.3.2 更换垃圾回收器
    • 2.4 实战
      • 2.4.1 总结


1 GC调优概述

在这里插入图片描述

1.1 调优指标

1.1.1 吞吐量

在这里插入图片描述

在这里插入图片描述

1.1.2 延迟

在这里插入图片描述

使用GCeasy来进行分析

1.1.3 内存使用量

在这里插入图片描述

2 GC调优方法

在这里插入图片描述

2.1 发现问题

2.1.1 jstat工具

在这里插入图片描述

jstat -gc 3785 1000 10

在这里插入图片描述

2.1.2 visualvm插件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.1.3 Prometheus+Grafana

在这里插入图片描述

2.1.4 GC Viewer

生成GC日志

在这里插入图片描述

-XX:+PrintGCDetails -Xloggc:test1.log

生成

在这里插入图片描述

在这里插入图片描述

java -jar gcviewer-1.36.jar test1.log

在这里插入图片描述

2.1.5 GCeasy

https://gceasy.ycrash.cn/gc-dashboard.jsp

在这里插入图片描述

在这里插入图片描述

给的相当详细

在这里插入图片描述

2.2 常见GC模式

2.2.1 正常情况

在这里插入图片描述

2.2.2 缓存对象过多

在这里插入图片描述

2.2.3 内存泄漏

在这里插入图片描述

2.2.4 持续FullGC

在这里插入图片描述

2.2.5 元空间不足导致FullGC

在这里插入图片描述

2.3 解决GC问题的手段

在这里插入图片描述

2.3.1 优化基础JVM参数

2.3.1.1 -Xmx -Xms 堆参数

在这里插入图片描述

在这里插入图片描述

2.3.1.2 -XX:MaxMetaspaceSize -XX:MetaspaceSize 元空间参数

在这里插入图片描述

所以我们启动程序之后基本都会触发1到2次的由元空间不足引起的FullGC,这是因为-XX:MetaspaceSize触发FullGC最开始的大小可能只有20M,所以会触发1到2次的FullGC,因为是在启动的时候触发的,所以并不会对用户的使用产生影响。

2.3.1.3 -Xss 虚拟机栈参数

在这里插入图片描述

2.3.1.4 不建议设置参数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3.1.5 模板

在这里插入图片描述

2.3.2 更换垃圾回收器

第二点减少对象的产生,就涉及内存调优,这个在以前已经讲过了,不再赘述

在这里插入图片描述

private Cache cache = Caffeine.newBuilder().weakKeys().softValues().build();

软引用+弱引用最大程度保证缓存不会溢出

先测试jdk8自带ps+po

-Xms4g -Xmx4g -Xss256k -XX:MaxMetaspaceSize=512m  -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/test.hprof  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

启动测试脚本

在这里插入图片描述

50并发下最大的响应时间是280ms,最后总结,并发越高,fullgc时间越长,因为创建对象速度快,可能刚刚释放,又要创建又要fullgc

再测试parnew+cms

-Xms4g -Xmx4g -Xss256k -XX:MaxMetaspaceSize=512m  -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/test.hprof  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParNewGC -XX:+UseConcMarkSweepGC

在这里插入图片描述

50并发下最大的响应时间是220ms,其实都差不多

最后测试g1,在jdk17上

在这里插入图片描述

在这里插入图片描述

平均不到100ms,差距还是非常明显的。

2.4 实战

在这里插入图片描述

分析出有很多缓存对象

如果想要生成内存快照时不做fullgc,则需要通过jmap来保存,去掉live即可

jmap -dump:format=b,file=/home/jvm/dump/jvm-optimize-jmap.hprof 29317

但是mat分析时还是会自动把能回收的对象排除在外,所以我们需要

在这里插入图片描述

找到了482M的对象,本应该是被回收的,但是这些数组已经不在gcroot的引用链上了,所以用回溯找是没法找到的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4.1 总结

在这里插入图片描述

在这里插入图片描述

相关文章:

【实战JVM】-实战篇-06-GC调优

文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC…...

深入解析智慧互联网医院系统源码:医院小程序开发的架构到实现

本篇文章,小编将深入解析智慧互联网医院系统的源码,重点探讨医院小程序开发的架构和实现,旨在为相关开发人员提供指导和参考。 一、架构设计 智慧互联网医院系统的架构设计是整个开发过程的核心,直接影响到系统的性能、扩展性和维…...

获取 Bean 对象更加简单的方式

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。 对象装配(对象注⼊)即DI 实现依赖注入的方式有 3 种: 1. 属性注⼊ 2. 构造⽅法注⼊ 3. Setter 注⼊ 属性注入 属性注⼊是使⽤ Auto…...

ChatGPT基本原理

技术背景与基础: 深度学习:ChatGPT建立在深度学习技术之上,通过复杂的神经网络结构模拟人类的语言处理过程。深度学习使得ChatGPT能够处理海量的文本数据,并从中提取出复杂的语言模式和规律。GPT架构:ChatGPT基于GPT&a…...

几种更新 npm 项目依赖的实用方法

几种更新 npm 项目依赖的实用方法 引言1. 使用 npm update 命令2. 使用 npm-check-updates 工具3. 使用 npm outdated 命令4. 直接手动更新 package.json 文件5. 直接安装最新版本6. 使用自动化工具结语 引言 在软件开发的过程中,我们知道依赖管理是其中一个至关重…...

Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250

BeautifulSoup是一个非常流行的Python库,广泛应用于网络爬虫开发中,用于解析HTML和XML文档,以便于从中提取所需数据。它是进行网页内容抓取和数据挖掘的强大工具。 功能特性 易于使用: 提供简洁的API,使得即使是对网页结构不熟悉…...

SAP-BASIS15-查看系统状态

...

前端怎么debugger排查线上问题

前端怎么debugger排查线上问题 1.问题背景2.问题详细说明3.处理方案a.开发环境怎么找,步骤一样的:b.生产环境怎么找,步骤一样的:还有一种情况就是你的子盒子是使用csshover父盒子出来的, 4.demo地址: 1.问题…...

LabVIEW源程序安全性保护综合方案

LabVIEW源程序安全性保护综合方案 一、硬件加密保护方案 选择和安装硬件设备 选择加密狗和TPM设备:选择Sentinel HASP加密狗和支持TPM(可信平台模块)的计算机主板。 安装驱动和开发工具:安装Sentinel HASP加密狗的驱动程序和开发…...

JS包装类:循环中为什么建议用变量存储str.length进行循环判断?

前言 在Javascript通常我们在遍历一个字符串的时候通常使用的方式是 var str "abcdefg"; for(let i0;i<str.length;i){}但在最近的学习中&#xff0c;有人建议我最好应该是下面这样执行。 var str "abcdefg"; for(let i0,len str.length;i<len;i)…...

Android Audio实战——音量默认值修改(一)

在前面的文章《音频配置加载》中我们知道了,Audio 的一些配置信息是由硬件驱动保存到 audio_policy_configuration.xml 文件中,音量的一些默认值也会如此。但是在一些车载设备开发中,需要适配不同车型的需求,一套代码通常要适配多个车型,这就需要在 FW 层进行一些默认值的…...

解决uni-app progress控件不显示问题

官方代码&#xff1a; <view class"progress-box"><progress :percent"80" show-info activeColor"red" stroke-width"10" /> </view> 进度条并不在页面中显示&#xff0c;那么我们需要给进度条加上宽高style"…...

使用C++版本的opencv dnn 部署onnx模型

使用OpenCV的DNN模块在C中部署ONNX模型涉及几个步骤&#xff0c;包括加载模型、预处理输入数据、进行推理以及处理输出。 构建了yolo类&#xff0c;方便调用 yolo.h 文件 #ifndef YOLO_H #define YOLO_H #include <fstream> #include <sstream> #include <io…...

python中实现队列功能

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python中实现队列功能 选择题 以下代码最后一次输出的结果是&#xff1f; from collections import deque queue deque() queue.append(1) queue.append(2) queue.append(3) print(【显示】…...

自然资源-关于城镇开发边界局部优化的政策思路梳理

自然资源-关于城镇开发边界局部优化的政策思路梳理 国土空间规划的核心之一是要统筹划定“三区三线”&#xff0c;三条控制线中的城镇开发边界的划定与优化工作&#xff0c;一直是国土空间规划改革的重要组成部分&#xff0c;其有助于遏制城市盲目扩张&#xff0c;强化底线约束…...

ElementUI的Table组件在无数据情况下让“暂无数据”文本居中显示

::v-deep .el-table__empty-block {width: 100%;min-width: 100%;max-width: 100%; }...

SAP-BASIS14-安装语言包

...

ant design的upload组件踩坑记录

antd版本 v4.17.0 1.自定义了onpreview和onchange事件&#xff0c;上传文件后&#xff0c;文件显示有preview的icon但是被禁用&#xff0c;无法调用onpreview事件。 问题展现&#xff1a; 苦苦查找原因&#xff0c;问题出在了这里&#xff0c;当文件没有url的时候&#xff0c…...

Python私教张大鹏 Vue3整合AntDesignVue之按钮组件

何时使用 标记了一个&#xff08;或封装一组&#xff09;操作命令&#xff0c;响应用户点击行为&#xff0c;触发相应的业务逻辑。 在 Ant Design Vue 中我们提供了五种按钮。 主按钮&#xff1a;用于主行动点&#xff0c;一个操作区域只能有一个主按钮。默认按钮&#xff1…...

【小海实习日记】PHP安装

## PHP环境搭建(Mac) ### php安装 使用brew需要安装homebrew >brew tap shivammathur/php >brew install shivammathur/php/php7.3 >brew link php7.3 这里可以需要homebrew使用代理进行下载&#xff0c;如果代理下载速度还是太慢&#xff0c;建议直接更该国内镜像…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...