jvm_3_GC参数

 

 

1 对象在堆



 

 

 

2 串行收集器

特点:

a) 最古老,最稳定

b) 效率高

c) 可能会产生较长停顿

d) 使用参数 -XX:+UseSerialGC 来启用,启用后,新生代对象采用复制算法,老年代对象采用标记-压缩算法

 

执行流程(单线程执行):

 



 

 

 

 

 

3 并行收集器

a) 使用如下参数开启:

-XX:+UseParNewGC 

开启后,新生代并行回收,老年代串行回收,因此仅影响新生代的收集。

b) 多线程需要多核支持

c) 采用复制算法

d) 使用参数 -XX:ParallelGCThreads限制线程数量

执行流程(多线程执行):



 

 

 

 

 

4 CMS收集器

 

......

 

5 为减轻GC压力,我们需要注意什么:

 

a) 软件如何设计架构

b) 代码如何写

c)堆空间如何分配

 

 

6 GC参数整理:

 

-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:SurvivorRatio:设置eden区大小和survivior区大小的比例
-XX:NewRatio:新生代和老年代的比
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:设置用于垃圾回收的线程数
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发

-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收
-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收

 

 

g干货甚少.....

 

<think>好的,用户想知道如何监控JVMGC暂停时间的计数指标。首先,我需要回忆一下JVM提供的监控工具和相关指标。 记得JVM有内置的工具,比如JConsole和VisualVM,这些工具可以查看内存和GC的情况。另外,像Grafana和Prometheus这样的监控系统通常也会集成JVM的指标,通过JMX来获取数据。用户提到GC暂停时间的计数,这可能涉及到垃圾回收的次数和每次暂停的时间。 然后,GC的指标通常由MBean提供,特别是GarbageCollectorMXBean。这个MBean会提供收集次数和总耗时。比如,每个垃圾收集器的名称,如G1 Young Generation,然后有CollectionCount和CollectionTime。但用户需要的是暂停时间的计数,可能需要将CollectionCount和每次的时间结合起来,或者是否有直接的指标。 另外,Micrometer库可以用来将JVM的指标导出到监控系统,比如使用MeterRegistry注册指标。引用中的MeterRegistry可能用于创建自定义的计量器,但GC暂停的指标可能已经由Micrometer自动提供了。 可能需要配置JMX来暴露这些MBean,然后通过Prometheus的JMX Exporter来抓取数据。或者使用Micrometer的JVM模块直接绑定这些指标。例如,meterRegistry.more().getJvmGcMetrics()可能会提供GC相关的指标,包括暂停时间和次数。 还要考虑不同的垃圾收集器,比如G1、CMS、Serial等,它们的指标名称可能不同,需要确认具体是哪个收集器在运行。此外,GC暂停时间的单位通常是毫秒,总时间可能需要除以次数来得到平均暂停时间。 用户的问题可能涉及如何配置监控系统来收集这些指标,以及如何查看当前的GC暂停情况。可能需要检查应用的启动参数,确保启用了GC日志,或者JMX配置正确。同时,使用像JConsole这样的工具可以直接查看实时数据,而日志分析工具可以解析GC日志文件,获取详细的暂停时间信息。 总结下来,步骤可能是:1. 使用JVM工具查看实时数据;2. 配置JMX和监控系统导出指标;3. 分析GC日志;4. 使用Micrometer库绑定指标到监控系统。需要详细说明每个步骤的具体操作,比如如何启用GC日志,如何配置Prometheus等。同时,引用中提到的MeterRegistry和JConsole可以作为支持这些方法的依据。</think>要监控JVMGC暂停时间计数指标,可通过以下方法实现: --- ### 1. 使用JMX和内置MBean JVM通过`GarbageCollectorMXBean`提供GC统计信息,包含**累计回收次数**和**总耗时**: ```java // 获取所有GC MBean List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans(); for (GarbageCollectorMXBean bean : gcBeans) { System.out.println(bean.getName() + ": " + bean.getCollectionCount() + "次, 总耗时" + bean.getCollectionTime() + "ms"); } ``` - **指标名称**:`java.lang:type=GarbageCollector,name=G1 Young Generation` - **关键属性**: - `CollectionCount`:GC事件次数(计数指标) - `CollectionTime`:累计暂停时间(毫秒) --- ### 2. 配置监控系统集成 #### Prometheus + JMX Exporter 1. 添加JMX Exporter代理到JVM启动参数: ```bash -javaagent:jmx_prometheus_javaagent.jar=8080:config.yaml ``` 2. 配置`config.yaml`抓取GC指标: ```yaml rules: - pattern: &#39;java.lang<type=GarbageCollector, name=(.+)><>CollectionCount&#39; name: jvm_gc_collection_count labels: gc: $1 - pattern: &#39;java.lang<type=GarbageCollector, name=(.+)><>CollectionTime&#39; name: jvm_gc_pause_seconds_total labels: gc: $1 help: "Total GC pause time in seconds" type: COUNTER ``` 3. 在Grafana中通过`jvm_gc_pause_seconds_total`查询总暂停时间[^1] #### Micrometer指标库 通过Spring Boot Actuator暴露GC指标: ```java @Bean MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() { return registry -> registry.config().commonTags("application", "myapp"); } ``` - 指标路径:`/actuator/metrics/jvm.gc.pause`(包含`count`, `sum`, `max`等维度) --- ### 3. GC日志分析 启用详细GC日志记录: ```bash -XX:+PrintGCDetails -Xloggc:/path/to/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M ``` 使用工具解析日志: - **GCViewer**:可视化暂停时间分布 - **gceasy.io**:在线分析工具,可生成暂停时间统计报告 --- ### 4. 实时监控工具 #### JConsole 1. 运行`jconsole`连接目标JVM 2. 在`MBean`标签页查看`java.lang/GarbageCollector`属性[^3] #### VisualVM 1. 安装`VisualGC`插件 2. 实时显示GC事件频率和暂停时间曲线 --- ### 指标解读示例 | 监控系统指标名称 | 含义 | |-----------------------------|-----------------------------| | `jvm_gc_pause_seconds_count` | GC事件总次数 | | `jvm_gc_pause_seconds_sum` | 累计暂停时间(秒) | | `jvm_gc_pause_seconds_max` | 单次最长暂停时间 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值