sea*_*ges 4 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.
Run Code Online (Sandbox Code Playgroud)
我关注的是"压缩的perm gen"用法:它是指最大分配的perm gen堆使用的百分比,还是最大堆使用的百分比,还是其他什么?提供的百分比似乎是使用/总计的一个除法,这是分配的perm gen总数吗?由于我们-XX:MaxPermSize设置为1GB ...
是否有任何有用的资源(除了Oracle白皮书,其中没有提到hs_err文件)来解释在JVM崩溃时转储的数据?
我从未找到准确描述"压缩烫发"值的参考文献,但我们自己的调查证明报告的值是:
目前使用PermGen /目前分配的PermGen
在我的问题的例子中,这意味着已经为PermGen分配了482944K的内存,并且在GC点使用了482943K(99%).我们的最大PermGen大小设置为1048576K(1GB),因此收集过程有大量的预留资源可以重新分配.
对于那些遇到类似问题的人 - 我们最终解决了我们的问题.在我们的案例中,它原来是一个使用sun.misc.Unsafe类的第三方库,如果使用不当,这是众所周知的"不安全".
在这种情况下,用于克隆对象的一段逻辑将特定的ClassLoader传递给某些sun.misc.Unsafe操作以复制对象.在某些计算机上,复制的对象经常在损坏的状态下创建.当JVM试图进行垃圾收集时,它最终会收获其中一个坏对象并崩溃.这总是导致我的问题中描述的错误.
| 归档时间: |
|
| 查看次数: |
2703 次 |
| 最近记录: |