3

我正在尝试编写一个程序,该程序使用 JMX 来查找当时 JVM 用于 GC 活动的 CPU 百分比(或一小部分时间,比如 1 秒),类似于 JVisualVM。使用 JMX,我能够找到 lasdt GC 周期开始和结束的时间的 GarbageCollectionTime。但是还没有找到将这些信息转换为 GC 的 CPU 利用率的方法。

4

3 回答 3

0

不幸的是,此信息无法通过 JMX 获得(恕我直言,VisualVM 显示不正确的 GC CPU 时间)。

您可以使用jstat -gc <pid>为您的 JVM 收集车库收集 CPU 使用情况。

jstat -gc <pid> 1s会产生这样的东西

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
6528.0 6528.0 6523.9 6528.0 52480.0  51600.0  2097152.0  1697279.8  21248.0 5647.8     39    6.873   5     11.685   18.559
6528.0 6528.0  0.0   6528.0 52480.0  13355.5  2097152.0  1794839.9  21248.0 5649.8     41    7.322   5     11.685   19.008
6528.0 6528.0  0.0   6528.0 52480.0  27790.8  2097152.0  1884439.9  21248.0 5649.8     43    7.646   5     11.685   19.332
6528.0 6528.0  0.0   6528.0 52480.0  50942.9  2097152.0  1974055.9  21248.0 5649.8     46    7.969   5     11.685   19.654
  • YGCT - CPU 时间是自 JVM 启动以来年轻代收集所消耗的秒数
  • FGCT - CPU 时间是自 JVM 启动以来完整收集所消耗的秒数
  • GCT - 以上的总和
于 2013-05-17T10:25:18.090 回答
0

也许jvmtop可以帮助你(看看GC专栏)

 JvmTop 0.3 alpha (expect bugs)  amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46
于 2013-06-02T01:06:14.177 回答
0

好吧,您将无法以编程方式找到答案。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/

您可以在此页面上找到解析 iCMS 日志的提示,并在页面上找到有关 GC 调整的提示。

希望有帮助!

于 2013-05-10T09:29:38.740 回答