我们正在为运行 Jolokia JMX 代理的 Kafka
设置 GC 监控。
我们正在使用 Telegraph
将 JMX 从系统传送到我们的 Grafana
服务器以绘制图形。
当我们检查 老年代的 G1 GC 计数
时,我们可以看到收集计数和收集时间是
使用以下命令运行 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/