JVM突然做了很长的次要收藏

时间:2017-05-24 23:02:01

标签: java performance garbage-collection

我在JDK8u91(在Solaris 10上)运行的Tomcat(7.0.71)具有相当大的24GB堆(-Xmx24000m,-XX:MaxNewSize = 64m)。我正在使用ParNewGC用于新一代和旧版本的CMS,有3个线程。

通常,次要集合很快(<250ms)。在看似随机的时间(无法将其与高应用程序或系统负载相关联),次要集合开始花费可笑的长时间,如60或甚至480秒!

2017-05-24T21:18:45.083+0200: 21126.227: [GC (Allocation Failure) 2017-05-24T21:18:45.084+0200: 21126.228: [ParNew: 59008K->5491K(59008K), 0.1586398 secs] 7944703K->7892598K(13640280K), 0.1591188 secs] [Times: user=0.34 sys=0.01, real=0.16 secs] 
2017-05-24T21:18:46.632+0200: 21127.776: [GC (Allocation Failure) 2017-05-24T21:18:46.632+0200: 21127.776: [ParNew: 57971K->6528K(59008K), 0.2516826 secs] 7945078K->7921839K(13640280K), 0.2520740 secs] [Times: user=0.58 sys=0.01, real=0.25 secs] 
==> 2017-05-24T21:19:06.366+0200: 21147.510: [GC (Allocation Failure) 2017-05-24T21:19:06.367+0200: 21147.510: [ParNew: 59008K->6528K(59008K), 61.3857565 secs] 8486461K->8447939K(13640280K), 61.3866299 secs] [Times: user=106.90 sys=1.07, real=61.39 secs] 
==> 2017-05-24T21:20:08.244+0200: 21209.386: [GC (GCLocker Initiated GC) 2017-05-24T21:20:08.244+0200: 21209.386: [ParNew: 59008K->6528K(59008K), 476.5251482 secs] 8500419K->8471560K(13640280K), 476.5259850 secs] [Times: user=848.62 sys=4.66, real=476.53 secs] 
2017-05-24T21:28:05.095+0200: 21686.223: [GC (GCLocker Initiated GC) 2017-05-24T21:28:05.095+0200: 21686.223: [ParNew: 56300K->6528K(59008K), 0.3201989 secs] 8526965K->8496807K(13640280K), 0.3206126 secs] [Times: user=0.71 sys=0.01, real=0.32 secs]

VM在这些事件发生后恢复,但当然在这些暂停期间应用程序不可用。我们已经尝试过让年轻一代更小或更大,但这些时间不断回归。

我们没有看到主要集合的任何意外问题(它们当然需要24GB堆的时间)。我知道总堆大小也会影响较小的收集时间(卡片扫描时间),但我不知道它是如何导致这些跳跃的!“

我完全无能为力导致这些延误。任何提示?

CU,Joe

0 个答案:

没有答案