【问题标题】:How to monitor JVM and know whether it is a minor GC or major GC for Parallel GC in real time way?如何实时监控JVM并知道是Minor GC还是Major GC for Parallel GC?
【发布时间】:2018-01-14 02:22:37
【问题描述】:

Oracle 提供了一些tools 用于监控。

但我无法使用可视化工具,因为我使用的是终端。 另外,jstat utility 在我使用 Parallel GC 时无法分辨是 Minor GC 还是 Major GC。

JVM执行Parallel GC时,有什么接口可以检测是Minor GC还是major GC?

【问题讨论】:

  • 为什么你需要知道哪种类型的GC周期JVM是当它发生时
  • 在 GarbageCollectorMXBean 上使用 JMX 通知。
  • @the8472 我认为major GC 比minor GC 长。值得观察。
  • @apangin 我无法更改 Java 代码。应将 JMX 添加到代码中。但我做不到。
  • @skytree 不需要。您可以使用 JVM 选项启动 JMX 代理,然后连接到服务器 remotely

标签: java garbage-collection jvm hotspot


【解决方案1】:

您应该添加 JVM 选项来记录 JVN 进程的 GC 活动:

-verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/your/log/dir/gc.log 

查看关于understanding the format of GC log的文章

这是list of GC log analysis tools。也许其中一些工具会对您有所帮助。

为了监控次要/主要 GC 的数量,您可以使用 jstat 。示例:

jstat -gcutil 21891 250 7
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00  97.02  70.31  66.80  95.52  89.14      7    0.300     0    0.000    0.300
  0.00  97.02  86.23  66.80  95.52  89.14      7    0.300     0    0.000    0.300
  0.00  97.02  96.53  66.80  95.52  89.14      7    0.300     0    0.000    0.300
 91.03   0.00   1.98  68.19  95.89  91.24      8    0.378     0    0.000    0.378
 91.03   0.00  15.82  68.19  95.89  91.24      8    0.378     0    0.000    0.378
 91.03   0.00  17.80  68.19  95.89  91.24      8    0.378     0    0.000    0.378
 91.03   0.00  17.80  68.19  95.89  91.24      8    0.378     0    0.000    0.378

您应该注意YGCFGC 列。这里有一篇文章解释Minor GC vs Major GC vs Full GC

【讨论】:

  • 但是如何实时进行呢?我知道日志,但只能事后处理。
  • 有什么办法可以在bash文件中解析日志流吗?
  • 也许 jstat 可以帮助你。它还可以显示年轻代 GC 事件的计数和其他统计信息。
  • 你可以试试 awk 解析语言。您可以通过谷歌搜索找到许多使用 awk 解析各种日志的示例
  • 如果您想知道 GC 何时开始或正在进行中,您可能需要额外的日志记录,因为大多数信息仅在 GC 周期完成后才写入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多