我正在尝试编写一个程序,使用 JMX 来查找 JVM 在该时刻(或一小部分时间,例如 1 秒)用于 GC Activity 的 CPU 百分比,类似于 JVisualVM。使用 JMX,我能够找到 lasdt GC 周期开始和结束的时间 GarbageCollectionTime。但尚未找到一种方法将该信息转换为 GC 的 CPU 利用率。
最佳答案
嗯,您将无法以编程方式找到答案。 GC 将使用 100% 的可用 CPU。真正的问题是“有多少个 CPU 可用?”
串行 GC (
-XX:+UseSerialGC
) 将使用一个 CPU。并行收集器(
-XX:+UseParallelGC
、-XX:+UseParallelOldGC
和-XX:+UseParNewGC
)将使用您提供的 CPU 数量 (-XX:ParallelGCThreads=N
),或者全部使用(如果您这样做)不指定数字大多数并发收集器(
-XX:+UseConcMarkSweepGC
和-XX:+UseG1GC
)将使用您提供的 CPU 数量 (-XX:ConcGCThreads=N
),如果您未指定,则使用其中的一半一个数字
请注意,使用 CMS 和 G1,您可以使用以下选项为 GC 设置一些目标:
-XX:MaxGCPauseMillis=X
将设置最大暂停时间目标(以毫秒为单位):-XX:GCPauseIntervalMillis=<X>
将设置两个 GC 周期之间的最小间隔目标
来源:http://jvm-options.tech.xebia.fr/
您可以在 this page 上找到解析 iCMS 日志的提示。 ,以及有关 GC 调整的提示 this page .
希望有帮助!
关于java - 使用 JMX 的 GC 使用的 CPU 百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16439275/