1

G1GC 日志将堆占用值打印为四舍五入到 MB 或 GB,有没有办法以KB 或 MB 打印所有值

我想分析分配率和提升率,而这种四舍五入的值引入了不精确性。

例如,下面的 GC 事件显示总堆占用减少,其中仅显示收集前总堆大小 11.7G->1826.2M的四舍五入值。11.7G

4592.204: [GC pause (G1 Evacuation Pause) (young)
  [Eden: 9804.0M(9804.0M)->0.0B(9800.0M) Survivors: 112.0M->86.0M 
  Heap: 11.7G(15.0G)->1826.2M(15.0G)]
  ...

使用的 VM 标志:

-Xms16g -Xmx16g -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log

使用热点 JVM 1.8.0-b132。

4

1 回答 1

3

请在此处此处查看 OpenJDK 7u 热点的源代码。

这两个点都使用了方法byte_size_in_proper_unit并且proper_unit_for_byte_size位于这里

我相信从 PrintGCDetails 或 PrintGC 修改 G1GC 日志的唯一方法是重新编译 JVM,而这只能使用 OpenJDK 而不是 Oracle 的 JVM。

有关输出格式的更多信息,请参阅下面的stackoverflow 帖子

您还可以使用带有选项 -gc 和 -gcnew 的 jstat 之类的工具来获取 G1GC 日志中的数据,这些数据仅在不同时间以 KB 为单位进行采样,有关 jstat 使用的更多信息,请参见此处。如果您想编写与 Jstat 类似的工具,源代码位于此处

于 2014-03-21T04:56:39.453 回答