JVM参数调优——G1收集器
开启 G1 Collector
G1收集器的出现除了提供可控的低延迟GC,解决历史收集器的一些弊病,同时还尽力简化调优参数
对于大多数应用,开启收集器,再配置一下Xms和Xmx就足够了(不建议配置Xmn)
-XX:+UseG1GC
核心参数
- 最大暂停时间的目标值
默认值为200毫秒。
太大会导致延迟大,太小会导致频繁GC,吞吐下降,请结合堆大小酌情谨慎调节。一般情况下,使用默认值就好。
-XX:MaxGCPauseMillis=200
- G1每个Region的大小
该值为2的幂,范围为1MB到32MB。我们的目标是根据最小Java堆大小拥有大约2048个区域。
建议交给JVM自动分配
-XX:G1HeapRegionSize=n
重要参数
-
年轻代堆大小的最小值
设置年轻代堆大小占整个堆的百分比。
默认值是Java堆的5% (experimental VM flag) -
年轻代堆大小的最大值
设置年轻代堆大小占整个堆的百分比。
默认值是Java堆的60%。(experimental VM flag)
-XX:G1NewSizePercent=5-XX:G1MaxNewSizePercent=60
- 触发标记周期的Java堆占用率阈值
触发标记周期的Java堆占用率阈值。默认占用率是整个Java堆的45%。
-XX:InitiatingHeapOccupancyPercent=45
- MixedGC周期中的老年代的占用率阈值
设置要包含在混合垃圾收集周期中的老年代的占用率阈值。默认占用率为85%。(experimental VM flag)
-XX:G1MixedGCLiveThresholdPercent=85
- 允许堆浪费的百分比
设置您愿意浪费的堆的百分比。默认值为10%。
当可回收百分比小于堆浪费百分比时,Java HotSpot VM不会启动混合垃圾收集周期。
-XX:G1HeapWastePercent=10
- MixedGC周期中收集老年代区域的上限
设置在混合垃圾收集周期中要收集的老年代区域的上限。默认值为Java堆的10%。
-XX:G1OldCSetRegionThresholdPercent=10
- 保留空闲内存百分比
设置保持空闲的保留内存百分比,以降低到空间溢出的风险。默认值为10%。
-XX:G1ReservePercent=10
- MixedGC收集的目标数量
设置标记周期后混合垃圾收集的目标数量,以收集最多包含 G1MixedGCLIveThresholdPercent 实时数据的旧区域。默认值为8个混合垃圾回收。混合集合的目标是在此目标数量内。
-XX:G1MixedGCCountTarget=8
GC问题分析
问题特征
使用默认配置参数,(MaxGCPauseMillis=200)多个服务GC收集器从CMS转到G1效果都很好,GC耗时每分钟 大都在40ms以内,但是有个服务就与众不同了。
- YoungGC耗时长 300~500ms 有时1s+;
- mixedGC 频次低,耗时短,都在50ms以内;
- 日志中常见 to survivor 耗尽 (to-space exhausted);
分析思路
- 调小年轻代
让yongGC频繁一些,快一些
默认5%~60%
-XX:+UnlockExperimentalVMOptions
-XX:G1NewSizePercent=25
-XX:G1MaxNewSizePercent=40
- mixedGC调节
提前触发,每次多回收一些
提前触发标记周期 45%–>35%
触发mixedGC的老年代的占用率阈值 85%–>60% (experimentalVMOptions)
mixedGC中要收集的老年代区域占整个堆的百分比上限 10%–>20%
混合垃圾收集的目标数量 8–>12
-XX:InitiatingHeapOccupancyPercent=35
-XX:+UnlockExperimentalVMOptions -XX:G1MixedGCLiveThresholdPercent=60
-XX:G1OldCSetRegionThresholdPercent=20
-XX:G1MixedGCCountTarget=12
- 防止晋升失败
少浪费一些:10%–>5%
空闲空间多留一些:10%–>20%
如大对象晋升失败,可调大Region
-XX:G1HeapWastePercent=5
-XX:G1ReservePercent=20
-XX:G1HeapRegionSize=8
常用命令
- 查看G1 experimental flag
java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version|grep 'experimental' |grep G1
- 查看某进程X设定的VM参数
例如查看 MaxGCPauseMillis 的值
jinfo -flag MaxGCPauseMillis pid
- 查看进程GC情况
各分区使用情况,GC次数和时间
jstat -gc pid
- 查看进程VM参数
jinfo -flags pid
reference
- https://www.oracle.com/technical-resources/articles/java/g1gc.html
- https://code84.com/882088.html
相关文章:
JVM参数调优——G1收集器
开启 G1 Collector G1收集器的出现除了提供可控的低延迟GC,解决历史收集器的一些弊病,同时还尽力简化调优参数 对于大多数应用,开启收集器,再配置一下Xms和Xmx就足够了(不建议配置Xmn) -XX:UseG1GC核心参…...
Linux cp命令使用指南:详细教程及实际应用场景解析
文章目录 Linux中的cp命令使用指南1. 简介1.1 Linux操作系统简介1.2 文件系统和目录结构1.3 cp命令概述 2. cp命令基本用法2.1 复制文件2.2 复制目录2.3 复制多个文件或目录2.4 递归复制2.5 强制覆盖已存在文件2.6 保留文件权限和属性 3. 高级用法3.1 保留符号链接3.2 仅复制更…...
树结构数据在table中回显 treeselect disabled
<el-table-column label"产业认定" align"center" prop"industryIdentification"><template slot-scope"scope"><treeselectv-if"scope.row.industryIdentification"v-model"scope.row.industryIdentif…...
BOA服务器移植
BOA服务器移植 1、源码下载 http://www.boa.org/ News! (last updated 23 February 2005) Latest Released Version (0.94.13) here (signature here) --- 下载地址1.1 boa简介: 其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器ÿ…...
洛谷刷题入门篇:顺序结构
链接如下:https://www.luogu.com.cn/training/100#problems 一、Hello,World! 题目链接:https://www.luogu.com.cn/problem/B2002 题目描述 编写一个能够输出 Hello,World! 的程序。 提示: 使用英文标点符号;Hello,World! 逗…...
LVS+Haproxy
LVSHaproxy 一、Haproxy简介1.1、Haproxy应用分析1.2、Haproxy的特性1.3、常见负载均衡策略1.4、LVS、Haproxy、Nginx区别1.5、 Haproxy的优点1.6、常见的Web集群调度器 二、Haproxy部署实例四、日志定义优化 一、Haproxy简介 Haproxy 是一个使用C语言编写的自由及开放源代码软…...
Linux知识
文章目录 一、Apt1、查看操作系统信息2、换源3、比较4、用法5、ubuntu获取源码 二、pkg-config三、调试glibc 一、Apt 1、查看操作系统信息 使用以下命令查看本机的操作系统和位数信息: uname -m && cat /etc/*release输出: x86_64 DISTRIB_I…...
Java基础(三)
前言:前面主要涉及到java的基本语法,接下来本篇博客主要记录Java中Collections类、泛型、以及File类、IO流的学习。 目录 数据结构 泛型 集合 分类 Collection的分类 collection常用方法 collection遍历方式 迭代器 for循环 Lambda表达式 Lis…...
[Firefox/快捷键] 禁用Ctrl-W快捷键
最近给Firefox这一快捷键坑了几次。恰好发现在CMU也有人遇到类似的烦恼,找到一篇基于Linux的教程。 我使用的是Windows,所以根据自己的情况做了些修改,成功了。小众需求就犯懒直接将笔记贴上了,如果有谁用得上的话,我写…...
Git常用命令diff和mv
Git常用命令diff和mv 1、diff # 查看工作区和暂存区所有文件的对比 # 该命令可以显示尚未添加到stage的文件的变更 $ git diff# 查看工作区和暂存区单个文件的对比 $ git diff file# 显示暂存区和上一个commit的差异 # 查看暂存区与指定提交版本的不同,版本可缺省为HEAD $ gi…...
【谢希尔 计算机网络】第3章 数据链路层
数据链路层 数据链路层的地位 网络中的主机、路由器等都必须实现数据链路层局域网中的主机、交换机等都必须实现数据链路层不同链路层可能采用不同的数据链路层协议 数据链路层信道类型 点对点信道 使用一对一的点对点通信方式广播通信 必须使用专用的共享系电脑协议来协调这些…...
《DevOps实践指南》- 读书笔记(九)
DevOps实践指南 25. 附录附录 1 DevOps 的大融合精益运动敏捷运动Velocity 大会运动敏捷基础设施运动持续交付运动丰田套路运动精益创业运动精益用户体验运动Rugged Computing 运动 附录 2 约束理论和核心的长期冲突附录 3 恶性循环列表附录 4 交接和队列的危害附录 5 工业安全…...
数据库数据恢复-SQL SERVER数据库分区被格式化的数据恢复方案
SQL SERVER数据库故障类型: 1、SQL SERVER数据库文件被删除。 2、SQL SERVER数据库所在分区格式化。 3、SQL SERVER数据库文件大小变为“0”。 4、使用备份还原数据库时覆盖原数据库。 SQL SERVER数据库故障原因: 1、人为误操作。 2、文件系统损坏&#…...
ubuntu安装ffmpeg
Ubuntu安装FFMPEG Ubuntu安装FFMPEG 安装FFMPEG(支持GPU加速) 1.安装ffnvvodec2.安装libx2643.安装ffmpeg4.查看并测试5.卸载 安装FFMPEG(CPU版本) 安装FFMPEG(支持GPU加速) 默认已经安装cuda10.2、cud…...
CentOS上安装Docker
要在CentOS上安装Docker,可以按照以下步骤进行操作: 更新系统软件包列表: sudo yum update安装必要的软件包,以便可以通过HTTPS使用仓库并使用最新的内核: sudo yum install -y yum-utils device-mapper-persistent…...
三相PWM整流器有限集模型预测电流控制MATLAB仿真模型
微❤关注“电气仔推送”获得资料 模型简介: 整流器交流侧为三相对称电压,220V/50Hz,直流侧为760V,且电压可调。其中模型预测模块采用matlab-function模块实现,交流侧电感的标称值为0.01H,如果不是&#x…...
【JavaEE】多线程(三)
多线程(三) 续上文,多线程(二),我们已经讲了 创建线程Thread的一些重要的属性和方法 那么接下来,我们继续来体会了解多线程吧~ 文章目录 多线程(三)线程启动 startsta…...
9.25day5---Qt
登录页面设计,建立用户注册以及登录的数据库,数据库保存用户名和密码 (ps:本篇只完成了登录功能,其他功能,请见下篇嘿嘿。) 再次注册则失败: 代码如下: 头文件: 登录…...
wpf制作自定义控件,并触发外部路由事件
目的是在前端增加一个自定义控件里的button后,按下动作可以调用使用该控件的页面的事件 首先在前端增加自定义控件里加入一个button,在其cs页面里注册点击事件 var btnAdd GetTemplateChild("btnAdd") as FlatButton;if (btnAdd ! null){btn…...
axios全局路由拦截的设置方法
一个项目中如果http请求发生了错误/异常,比如返回码4xx(表示没有授权,登录过期等),我们希望能够在axios在第一时间就能拦截获取到,然后直接提示报错的错误信息,而不是在发起请求的地方ÿ…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
