我在生产中遇到一个奇怪的问题,经过5年多的运作后才发生一次。我们发现PSPermGen和&#39;真实&#39;持续时间远远高于用户+系统时间。 2016年2月4日,PSPermGen在之前的运行时间为0.2-0.3秒,并且没有释放内存,耗时38.96秒。当用户+ sys为0.3-0.4秒时,实时花费40秒,这与之前的运行相比异常高。没有看到完整的GC频繁发生,我也没有观察到任何GC相关的错误。 CPU使用率是&lt; 1%,内存使用率<1持续时间为20%。
INFO | jvm 1 | 2016/02/04 02:56:56 | [GC [PSYoungGen: 88312K-> 936K(86144K)] 261016K-> 174219K(260928K),0.4070215秒] [时间:用户= 0.75 sys = 0.00,实际= 0.42秒] INFO | jvm 1 | 2016/02/04 02:57:08 | [GC INFO | jvm 1 | 2016/02/04 02:57:11 | [PSYoungGen:85703K-> 96K(102400K)] 258985K-> 175019K(278784K), 3.1902546 secs] [次:用户= 7.14 sys = 0.05,实际= 3.18秒] INFO | jvm 1 | 2016/02/04 02:57:13 | [GC [PSYoungGen: 102368K-> 755K(123520K)] 277291K-> 175700K(299904K),0.0266474秒] [时间:用户= 0.00 sys = 0.00,实际= 0.02秒] INFO | jvm 1 | 2016/02/04 02:57:20 | [GC [PSYoungGen:123507K-> 128K(144768K)] 298452K-> 175419K(321152K),0.0021357 secs] [次:用户= 0.01 sys = 0.01, 真= 0.02秒] INFO | jvm 1 | 2016/02/04 02:57:28 | [GC [PSYoungGen:143616K-> 977K(144704K)] 318907K-> 176319K(321088K), 0.0035773秒] [时间:用户= 0.00 sys = 0.00,实际= 0.00秒] INFO | jvm 1 | 2016/02/04 02:57:28 | [完整GC状态|包装| 2016/02/04 02:58:03 | JVM出现挂起:等待信号超时 来自JVM。重新启动JVM。信息| jvm 1 | 2016/02/04 02:58:08 | [PSYoungGen:977K-> 0K(144704K)] [PSOldGen:175341K-> 35127K(174784K)] 176319K-> 35127K(319488K)[ PSPermGen:38992K-> 38992K(65536K)], 38.9595115秒] [时间:用户= 0.33 sys = 0.14,真实= 40.07秒]
最后几个完整的GC是:
INFO | jvm 1 | 2016/02/02 12:59:49 | [Full GC [PSYoungGen: 433K-> 0K(98944K)] [PSOldGen:176749K-> 38591K(174784K)] 177183K-> 38591K(273728K)[PSPermGen:39380K-> 39380K(65536K)], 0.2982459秒[Tim es:user = 0.30 sys = 0.00,real = 0.30 secs] 21189 INFO | jvm 1 | 2016/02/03 03:15:16 | [Full GC [PSYoungGen: 2873K-> 0K(125696K)] [PSOldGen:171318K-> 33804K(174784K)] 174191K-> 33804K(300480K)[PSPermGen:39940K-> 38366K(65536K)], 0.3317803秒] [时间:用户= 0.34 sys = 0.00,实际= 0.34秒] 47151 INFO | jvm 1 | 2016/02/03 12:16:51 | [Full GC [PSYoungGen: 1406K-> 0K(171776K)] [PSOldGen:174936K-> 38003K(174784K)] 176342K-> 38003K(346560K)[PSPermGen:38642K-> 38642K(65536K)], 0.2988259秒] [时间:用户= 0.30 sys = 0.00,真实= 0.30秒]
我在Windows 2003 x86上运行Java 6更新45,大约8GB和4个CPU。磁盘空间绰绰有余。我们将JVM配置为初始堆内存为256 MB,最大内存为512 MB。该应用程序通过Tanuki Wrapper作为Windows服务运行。
目前看来,长时间的GC暂停是由于内存,CPU,磁盘空间等原因造成的。我在这里缺少什么?