Java:G1 老年代垃圾回收计数为 0

标签 java apache-kafka garbage-collection jconsole

我们正在为运行 Jolokia JMX 代理的 Kafka 设置 GC 监控。 我们正在使用 Telegraph 将 JMX 从系统传送到我们的 Grafana 服务器以绘制图形。

当我们检查 老年代的 G1 GC 计数 时,我们可以看到收集计数和收集时间是 enter image description here

但是 G1 Old Gen 的内存池下降在下图中很明显 enter image description here

使用以下命令运行 Kafka 进程的 Java 参数:

-javaagent:/usr/lib/jolokia/jolokia-jvm-1.5.0-agent.jar -Xmx2G -Xms2G -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX :+ExplicitGCInvokesConcurrent -Djava.awt.headless=true -Xloggc:/home/test/kafka_2.12-1.0.1/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX :+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun. management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8000 -Djava.rmi.server.hostname=172.31.24.149 -Dkafka.logs.dir=/home/test/kafka_2.12-1.0.1/bin/../logs -Dlog4j.configuration=file:./bin/../config/log4j.properties

谁能指出问题所在。

最佳答案

G1 垃圾收集器使用 3 种类型的收集(都是 Stop-the-World)

  • young GC只收集young空间
  • mixer GC 收集年轻空间 + 来自旧空间的少量区域
  • full GC - 紧急 GC 收集所有东西,如果增量收集跟不上应用程序内存使用,就会触发

理想情况下,Full GC 永远不会发生在 G1 中。

关于 JMX 计数器, - young 和 mixer 被算作年轻的 GC - full GC 算作旧的

正如我所说,在 G1 的情况下,旧的 GC JMX 计数器预计将保持在 0,尽管旧的空间被年轻的回收(增量)回收。

关于Java:G1 老年代垃圾回收计数为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830693/

相关文章:

java - 使用收集器使用临时变量

haskell - 有什么方法可以手动指示 MutableArray# 的元素对 GC 来说是安全的吗?

java 9 第三方模块适用于 IDE 但不适用于 jlink

java - Stream.sorted().forEach() 是否按预期工作?

java - 对象输入流异常

spring - 添加多个 KafkaListenerContainerFactories 时出现问题

C# 垃圾回收

JavaCSV 未读取任何行

apache-kafka - Kafka消费者组分区问题

python - 如何在kafka消费者中读取和处理高优先级消息?