当前位置: 首页 > 知识库问答 >
问题:

在整个GC期间,'pspermgen'和'real'时间与'user'和'sys'时间相比持续时间长

明宜年
2023-03-14

我在生产中遇到了一个奇怪的问题,在操作了5年多后只发生过一次。我们发现,PSPermGen和“real”持续时间远远高于User+SYS时间。2016年2月4日,PSPermGen花了38.96秒,而以前的运行是0.2-0.3秒,并且没有释放内存。当User+SYS为0.3-0.4秒时,实时时间需要40秒,与以前的运行相比,这是异常高的。完全的GC并不经常发生,我也没有观察到任何与GC相关的错误。CPU使用率<1%,内存使用率<20%。

信息jvm 1 2016/02/04 02:56:56[GC[Psyounggen:88312K->936K(86144K)]261016K->174219K(260928K),0.4070215秒][次:user=0.75sys=0.00,Real=0.42秒]信息jvm 1 201/02/04 02:57:08[GC信息jvm 1 201/02/04 02:57:11[Psyounggen:85703K->96K(102400K)]258985K->175019K(278784K),3.1902546秒][时间:用户=7.14 SYS=0.05,Real=3.18秒]信息jvm 1 201 6/02/04 02:57:13[GC[Psyounggen:102368K->755K(123520K)]277291K->175700K(299904K),0.0266474秒][时间:用户=0.00 SYS=0.00,Real=0.02秒]信息jvm 1 201 6/02/04 02:57:20[GC[Psyounggen:123507K->128K(144768K)]298452K->175419K(321K)152K),0.0021357秒][时间:user=0.01 sys=0.01,real=0.02秒]信息jvm 1 201 6/02/04 02:57:28[GC[psyounggen:143616K->977K(144704K)]318907K->176319K(321088K),0.0035773秒][时间:user=0.00 sys=0.00,real=0.00秒]信息jvm 1 201 6/02/04 02:57:28[完整的GC状态包装器2016/02/04 02:58:03 jvm出现挂起:超时等待来自jvm的信号。重新启动JVM。信息jvm 1 201 6/02/04 02:58:08[Psyounggen:977K->0K(144704K)][Psoldgen:175341K->35127K(174784K)]176319K->35127K(319488K)[Pspermgen:38992K->38992K(65536K)],38.9595115秒][时间:user=0.33 sys=0.14,real=40.07秒]

最后几次执行的完整GCs是:

信息jvm 1 201 6/02/02 12:59:49[完整GC[心理学: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秒]21189 INFO jvm 1 201 6/02/03 03:15:16[完整GC[Psyounggen:2873K->0K(125696K)][Psoldgen:171318K->33804K(17734K)4784K)]174191K->33804K(300480K)[pspermgen:39940K->38366K(65536K)],0.3317803秒][T imes:user=0.34 sys=0.00,real=0.34秒]47151信息jvm 1 201 6/02/03 12:16:51[Full GC[psyounggen:1406K->0K(171776K)][psoldgen:174936K->38003K(174784K)]176342K->38003K(346560K)[pspermgen:38 642K->38642K(65536K)],0.2988259秒][T IMES:user=0.30 sys=0.00,real=0.30秒]

我在Windows2003x86上运行Java6Update45,大约有8GB和4个CPU。磁盘空间已经足够了。我们将JVM配置为初始堆内存为256 MB,最大内存为512 MB。该应用程序通过Tanuki包装器作为Windows服务运行。

目前看来,长时间的GC暂停并不是由于内存、CPU、磁盘空间等原因。我在这里遗漏了什么?

共有1个答案

令狐宏浚
2023-03-14

我刚刚在http://www.evanjones.ca/jvm-mmap-pause.html上发现了一篇文章,其中指出问题可能出在磁盘IO上,可以通过设置-xx:+PerfDataDisableSharedMem来解决。但是,这里的另一个链接:http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2015-march/014324.html表明,这将影响jcmd和jps等监视工具

 类似资料:
  • 问题内容: 我们在JBoss上运行了一个基于Web Java的应用程序,允许的最大堆大小约为1.2 GB(计算机的总物理内存为2 GB)。在某些时候,应用程序停止(对客户端)响应几分钟。经过分析,我们发现罪魁祸首是Full GC。这是详细GC日志的摘录: 74477.402:[完整GC [PSYoungGen:3648K-> 0K(332160K)] [PSOldGen:778476K-> 589

  • 在我的应用程序中,用户需要能够输入持续时间,包括分钟和秒。 我正在考虑使用Windows中的控件来更改时间,虽然我只需要几分钟和几秒钟,而且箭头也很好,但不是必需的。 JavaFX 2中是否已经有此控件 如果没有,我如何创建这样的控件 上述Windows控件的屏幕截图: 谢谢你的提示!

  • 问题内容: 我有一个价值,我想得到另一个正好是1个月前的时间。 我知道可以用(想要另一个)进行减法,但这会导致a,而我反过来需要它。 问题答案: 尝试AddDate: 产生: 游乐场:http://play.golang.org/p/QChq02kisT

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间

  • 对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1

  • 我正在为我的聊天应用程序使用firebase。在聊天对象中,我使用方法添加时间戳。 请就这个问题提出解决办法