java - GC 暂停 5 秒,但标记、扫描和压缩耗时不到 1 秒

标签 java garbage-collection jvm aix

我有一个 AIX 服务器,使用 gencon GC 策略运行具有 8 GB 堆的 JVM 进程。今天我有 5 秒的暂停时间,这令人担忧。我查看了 GC 日志中的事件,但无法弄清楚所有时间都花在哪里了。

<con event="collection" id="1" timestamp="Oct 22 13:34:10 2015" intervalms="0.000">   <time exclusiveaccessms="0.195" />   <nursery freebytes="871692288" totalbytes="966367232" percent="90" />   <tenured freebytes="375809024" totalbytes="7516192768" percent="4" >
    <soa freebytes="0" totalbytes="7140383744" percent="0" />
    <loa freebytes="375809024" totalbytes="375809024" percent="100" />   </tenured>   <stats tracetarget="2430736896">
    <traced total="2804446392" mutators="2591437504" helpers="213008888" percent="115" />
    <cards cleaned="1874" kickoff="102056216" />   </stats>   <con event="remembered set scan">
    <stats objectsfound="17649" traced="110458224" timetakenms="129.797" />   </con>   <con event="final card cleaning">
    <stats cardscleaned="334" traced="9118008" durationms="7.732" />   </con>   <gc type="global" id="1" totalid="929" intervalms="0.000">
    <classloadersunloaded count="162267" timetakenms="4957.805" />
    <refs_cleared soft="1942" threshold="32" weak="164659" phantom="0" />
    <finalization objectsqueued="120" />
    ***<timesms mark="258.390" sweep="33.125" compact="0.000" total="5267.373" />***
    <nursery freebytes="904360200" totalbytes="966367232" percent="93" />
    <tenured freebytes="3848182720" totalbytes="7516192768" percent="51" >
      <soa freebytes="3472373696" totalbytes="7140383744" percent="48" />
      <loa freebytes="375809024" totalbytes="375809024" percent="100" />
    </tenured>   </gc>   <nursery freebytes="904360200" totalbytes="966367232" percent="93" />   <tenured freebytes="3848182720" totalbytes="7516192768" percent="51" >
    <soa freebytes="3472373696" totalbytes="7140383744" percent="48" />
    <loa freebytes="375809024" totalbytes="375809024" percent="100" />   </tenured>   <time totalms="5406.538" /> </con>

如何找到完整 GC 的哪个 Activity 部分占用了大部分暂停时间?

谢谢

最佳答案

扫描类加载器所花费的时间不计入总时间:

<classloadersunloaded count="162267" timetakenms="4957.805" />

内存中有 162267 个类加载器,扫描需要 4957.805 毫秒。这似乎是已知问题,解决方法和修复如下:http://www-01.ibm.com/support/docview.wss?uid=swg1IZ76742

关于java - GC 暂停 5 秒,但标记、扫描和压缩耗时不到 1 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281313/

相关文章:

java - Spring MVC HTTP 状态 400

java - 应用程序(JBoss + Hibernate + Infinispan)性能在相同数据上下降

java - 强制 JVM 尽早收集垃圾并减少尽早使用的系统内存

java - java页面上下文属性的垃圾收集

android - 一个简单的 "Hello World"项目的 17.8 MiB 堆分配?

java - "modern JVMs"与旧版 JVM 有何不同?

java - 获取给定 JVM 实例中所有当前加载的类的列表

java - 为什么我无法在 Java 中访问这个创建的对象?

java - 如何在 JavaFX 中传递参数

java - JVM 1.6.0_65 版本不适合本产品