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

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以内,但是有个服务就与众不同了。

  1. YoungGC耗时长 300~500ms 有时1s+;
  2. mixedGC 频次低,耗时短,都在50ms以内;
  3. 日志中常见 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简介&#xff1a; 其可执行代码只有大约60KB左右&#xff0c;Boa是一个单任务的HTTP服务器&#xff…...

洛谷刷题入门篇:顺序结构

链接如下&#xff1a;https://www.luogu.com.cn/training/100#problems 一、Hello,World! 题目链接&#xff1a;https://www.luogu.com.cn/problem/B2002 题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;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、查看操作系统信息 使用以下命令查看本机的操作系统和位数信息&#xff1a; uname -m && cat /etc/*release输出&#xff1a; x86_64 DISTRIB_I…...

Java基础(三)

前言&#xff1a;前面主要涉及到java的基本语法&#xff0c;接下来本篇博客主要记录Java中Collections类、泛型、以及File类、IO流的学习。 目录 数据结构 泛型 集合 分类 Collection的分类 collection常用方法 collection遍历方式 迭代器 for循环 Lambda表达式 Lis…...

[Firefox/快捷键] 禁用Ctrl-W快捷键

最近给Firefox这一快捷键坑了几次。恰好发现在CMU也有人遇到类似的烦恼&#xff0c;找到一篇基于Linux的教程。 我使用的是Windows&#xff0c;所以根据自己的情况做了些修改&#xff0c;成功了。小众需求就犯懒直接将笔记贴上了&#xff0c;如果有谁用得上的话&#xff0c;我写…...

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数据库故障类型&#xff1a; 1、SQL SERVER数据库文件被删除。 2、SQL SERVER数据库所在分区格式化。 3、SQL SERVER数据库文件大小变为“0”。 4、使用备份还原数据库时覆盖原数据库。 SQL SERVER数据库故障原因&#xff1a; 1、人为误操作。 2、文件系统损坏&#…...

ubuntu安装ffmpeg

Ubuntu安装FFMPEG Ubuntu安装FFMPEG 安装FFMPEG&#xff08;支持GPU加速&#xff09; 1.安装ffnvvodec2.安装libx2643.安装ffmpeg4.查看并测试5.卸载 安装FFMPEG&#xff08;CPU版本&#xff09; 安装FFMPEG&#xff08;支持GPU加速&#xff09; 默认已经安装cuda10.2、cud…...

CentOS上安装Docker

要在CentOS上安装Docker&#xff0c;可以按照以下步骤进行操作&#xff1a; 更新系统软件包列表&#xff1a; sudo yum update安装必要的软件包&#xff0c;以便可以通过HTTPS使用仓库并使用最新的内核&#xff1a; sudo yum install -y yum-utils device-mapper-persistent…...

三相PWM整流器有限集模型预测电流控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料 模型简介&#xff1a; 整流器交流侧为三相对称电压&#xff0c;220V/50Hz&#xff0c;直流侧为760V&#xff0c;且电压可调。其中模型预测模块采用matlab-function模块实现&#xff0c;交流侧电感的标称值为0.01H&#xff0c;如果不是&#x…...

【JavaEE】多线程(三)

多线程&#xff08;三&#xff09; 续上文&#xff0c;多线程&#xff08;二&#xff09;&#xff0c;我们已经讲了 创建线程Thread的一些重要的属性和方法 那么接下来&#xff0c;我们继续来体会了解多线程吧~ 文章目录 多线程&#xff08;三&#xff09;线程启动 startsta…...

9.25day5---Qt

登录页面设计&#xff0c;建立用户注册以及登录的数据库&#xff0c;数据库保存用户名和密码 &#xff08;ps:本篇只完成了登录功能&#xff0c;其他功能&#xff0c;请见下篇嘿嘿。&#xff09; 再次注册则失败&#xff1a; 代码如下&#xff1a; 头文件&#xff1a; 登录…...

wpf制作自定义控件,并触发外部路由事件

目的是在前端增加一个自定义控件里的button后&#xff0c;按下动作可以调用使用该控件的页面的事件 首先在前端增加自定义控件里加入一个button&#xff0c;在其cs页面里注册点击事件 var btnAdd GetTemplateChild("btnAdd") as FlatButton;if (btnAdd ! null){btn…...

axios全局路由拦截的设置方法

一个项目中如果http请求发生了错误/异常&#xff0c;比如返回码4xx&#xff08;表示没有授权&#xff0c;登录过期等&#xff09;&#xff0c;我们希望能够在axios在第一时间就能拦截获取到&#xff0c;然后直接提示报错的错误信息&#xff0c;而不是在发起请求的地方&#xff…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...