Grafana安装与基础配置

一、垃圾收集算法

1、CMS

专为老年代设计的一个低延迟收集器,通常会与一个用于 Young GC 的并行收集器(ParNew)配对使用。

垃圾收集阶段:

  1. 初始标记(initial mark)(STW)
  2. 并发标记(concurrent mark
  3. 并发预清理(concurrent preclean
  4. 重新标记(remark)(STW
  5. 并发清理(concurrent sweep
  6. 并发重置(concurrent reset

初始标记阶段的目的是为该区域内的垃圾收集提供一个稳定的起点集合,这些起点集合称为内部指针,相当于用于收集周期的垃圾收集根。

并发标记阶段本质上是在堆上运行三色标记算法,记录以后可能需要修正的任何修改

并发预清理阶段尽可能缩短会造成STW的重新标记阶段的长度

重新标记阶段使用卡表来修正可能会在并发标记阶段受Mutator(应用)线程影响的标记

启用标志:

1
-XX:+UseConcMarkSweepGC

此标志也会同步启用ParNewGC(用于新生代内存回收)

2、G1

G1堆基于区域(region)`的概念。支持的区域大小为1、2、4、8、16、32或64MB中的某个值,默认情况下,期望堆中区域的数量在2048到4095之间,如果不在,会调整区域的大小来实现这个目标。

区域大小计算:

1
<Heap Size> / 2048 ,结果取整数,选择离它最近的所允许的区域大小

区域数量计算:

1
Number of regions = <Heap Size> / <Region Size>

巨型区域与巨型对象:

占用空间超过一半的对象被认定为是巨型(humongous)对象.

巨型区域是连续的空闲区域,可以立即成为Tenured区域(而非Eden区域)的一部分

记忆集(remembered set , RSet):

每个区域都有的条目,它们会记录指向当前堆区域的外部引用。G1不需要通过遍历整个堆来寻找指向某个区域的引用,只需要检查RSet即可。

G1的各阶段:

1、初始标记(initial mak) STW

2、并发根扫描(concurrent root scan)

​ 扫描初始标记的Survivor区域以寻找指向老年代的引用

3、并发标记(concurrent remark)

4、重新标记(remark) STW

5、清理(cleanup) STW

启用标志:

1
-XX:UseG1GC

配置参数:

标志 描述 默认值
XX:MaxGCPauseMillis=200 GC最大暂停时间 200
-XX:G1HeapRegionSize=<n> Region区域大小,n必须是2的幂,范围在1~64MB之间
-XX:ConcGCThreads 并发标记线程数量
-XX:+AlwaysPreTouch 在启动时由操作系统将物理内存分配给VM,而不是实际使用的时候在由虚拟内存映射物理内存

要求JDK最低版本 8u40

二、垃圾收集日志

垃圾收集标志(jdk8)

标志 描述
-Xloggc:gc.log 控制垃圾收集事件写入哪个文件
-XX:+PrintGCDetails 将垃圾收集事件的详细信息写入日志
-XX:+PrintTenuringDistribution 提供了计算关键的内存压力影响和事件(如过早晋升)所需的原始数据,需要使用工具查看
-XX:+PrintGCTimeStamps 打印垃圾收集事件的发生时间(自虚拟机启动后的秒数)
-XX:+PrintGCDateStamps 打印垃圾收集事件发生的挂钟时间
-XX:+UseGCLogFileRotation 打开日志文件滚动
-XX:+NumberOfGCLogFiles=<n> 设置滚动日志文件的个数
-XX:+GCLogFileSize=<size> 设置滚动日志文件的最大值,当文件大小超过该参数值时,日志将写入下一个文件

Grafana安装与基础配置
https://probiecoder.cn/java/gc.html
作者
duwei
发布于
2025年4月22日
许可协议