java - "compacting perm gen"值代表什么?

标签 java jvm crash-reports crash-dumps jvm-crash

我正在调查我们的一个生产系统上的 JVM 崩溃,以下内存值在下面的 hs_err_pid 日志文件片段中代表什么?

Heap
 par new generation   total 1258624K, used 955445K [0x00000005c0000000, 0x00000006155b0000, 0x000000066aaa0000)
  eden space 1118784K,  73% used [0x00000005c0000000, 0x00000005f1e52598, 0x0000000604490000)
  from space 139840K,  98% used [0x000000060cd20000, 0x00000006153db100, 0x00000006155b0000)
  to   space 139840K,   0% used [0x0000000604490000, 0x0000000604490000, 0x000000060cd20000)
 tenured generation   total 2796224K, used 1745107K [0x000000066aaa0000, 0x0000000715550000, 0x00000007c0000000)
   the space 2796224K,  62% used [0x000000066aaa0000, 0x00000006d52d4d90, 0x00000006c2e0c400, 0x0000000715550000)
 compacting perm gen  total 482944K, used 482943K [0x00000007c0000000, 0x00000007dd7a0000, 0x0000000800000000)
   the space 482944K,  99% used [0x00000007c0000000, 0x00000007dd79fff0, 0x00000007dd7a0000, 0x00000007dd7a0000)
No shared spaces configured.

我关心的是“compacted perm gen”用法:它是指最大分配的 perm gen 堆的使用百分比,还是最大堆的使用百分比,或其他什么?提供的百分比似乎是已用/总计的除法,这是总分配的 perm gen 吗?由于我们的 -XX:MaxPermSize 设置为 1GB...

是否有任何有用的资源(Oracle whitepaper 除外,它没有提到 hs_err 文件)来解释在 JVM 崩溃时转储的数据?

最佳答案

我从未找到准确描述“compacting perm gen”值的引用资料,但我们自己的调查证明报告的值是:

currently used PermGen / currently allocated PermGen

在我的问题示例中,这意味着已经为 PermGen 分配了 482944K 内存,其中 482943K 内存已在 GC 点使用 (99%)。我们的最大 PermGen 大小设置为 1048576K (1GB),因此收集过程有大量保留资源可用于重新分配。

对于那些遇到类似问题的人 - 我们最终解决了问题。在我们的案例中,它原来是一个利用了 sun.misc.Unsafe 的第三方库。类,即 notoriously "unsafe"当使用不当。

在这种情况下,一个 piece of logic for cloning objects将特定的 ClassLoader 传递给某些 sun.misc.Unsafe 操作以复制对象。在某些机器上,复制的对象经常以损坏的状态创建。当 JVM 尝试进行垃圾收集时,它最终会收集这些坏对象之一并崩溃。这总是导致我的问题中描述的错误。

关于java - "compacting perm gen"值代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611423/

相关文章:

java - java ee 6 中的欢迎页面

java - 查找图像的最小可视矩形的尺寸

jvm - 这段 Gosu 代码中的反斜杠有什么作用?

ios - Apple 对我的应用程序的回答 : App rejected because it crashed but I can't find the crash

ios - 关于应用内购买代码的奇怪崩溃报告

java - 将 Instant 格式化为 String 时出现 UnsupportedTemporalTypeException

java - 在 SuperDevMode (Maven) 中运行时出错

Scala垃圾回收?

java - JVM 的 "-server"选项是否需要成为第一个选项?

dll - 修补可执行文件以避免崩溃