小编Har*_*rry的帖子

GC日志中的负数所需幸存者大小

我正在研究一个完全用Java编写的内存数据库.我们有一个输入源,它为系统提供数据,这就是提取/加载阶段.在运行这个时,我注意到JVM正在挂起,其根本原因是Full GC被触发.然后应用程序冻结,然后出现OutOfMemory错误(GC Overhead Limit Exceeded)

检查GC日志显示了很多垃圾收集,包括年轻人和老年人.令人惊讶的一件事是Desired Survivor的规模是负面的.我想知道为什么会这样?有没有人遇到过这个?

环境:

  • Windows7 Professional Service Pack1
  • Dell Precision T7500,24核
  • 64位O/S 192 GB RAM

Sun JDK版本: 1.7.0_13-b20(64位)

JVM设置:

  • -Xmx100g
  • -Xms100g
  • -verbose:GC
  • -Xloggc:C:/temp/logs/gc.log
  • -XX:+ PrintGCTimeStamps
  • -XX:+ PrintGCDetails
  • -XX:+ PrintTenuringDistribution
  • -XX:MaxPermSize参数=256米
  • -XX:+ UseParallelOldGC

GC日志摘录(这不是完整日志):

0.666:[GC所需幸存者大小178913280字节,新阈值7(最大15)[PSYoungGen:524289K-> 4431K(30583488K)] 524289K-> 4503K(100488576K),0.0052536秒] [时间:用户= 0.03 sys = 0.00,真实= 0.01秒]

0.671:[全GC(系统)[PSYoungGen:4431K-> 0K(30583488K)] [ParOldGen:72K-> 4096K(69905088K)] 4503K-> 4096K(100488576K)[PSPermGen:8852K-> 8847K(21248K)],0.0853597 secs] [次:用户= 0.08 sys = 0.00,实际= 0.09秒]

12.306:[GC所需幸存者大小178913280字节,新阈值7(最大15)[PSYoungGen:26214464K-> 389676K(30583488K)] 26218560K-> 393868K(100488576K),0.1907519秒] [时间:用户= 0.69 sys = 0.69,真实= 0.19秒]

19.845:[GC所需幸存者大小178913280字节,新阈值7(最大15)[PSYoungGen:26604140K-> 4369012K(30583488K)] 26608334K-> 4539738K(100488576K),2.0671426秒] [时间:用户= 12.67 sys = …

java performance garbage-collection jvm out-of-memory

5
推荐指数
1
解决办法
1223
查看次数