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

java-full GC(垃圾收集器)在短时间内发生大量导致性能下降

越嘉树
2023-03-14

你能解释一下这里发生了什么吗。

下面是gc.log上的输出。

..

Jul 18 14:52:49 fwprodcontent03 GC.log:3182.923:[GC[Psyounggen:0K->0K(2752512K)]2748930K->2748930K(10092544K),0.0607190秒][times:user=0.39 SYS=0.01,real=0.06秒]

Jul 18 14:52:57 fwprodcontent03 GC.log:3182.984:[完整GC[Psyounggen:0K->0K(2752512K)][ParoldGen:2748930K->2748528K(7340032K)]2748930K->2748528K(10092544K)[PsPermGen:262143K->262141K(262144K)],8.5377730秒][times:user=98.30 SYS=0.57,Real=8.54秒]

Jul 18 14:52:58 fwprodcontent03 GC.log:3191.533:[GC[Psyounggen:202K->128K(2752512K)]2748731K->2748656K(10092544K),0.1088430秒][times:user=0.67 sys=0.00,real=0.11秒]

Jul 18 14:53:02 fwprodcontent03 GC.log:3191.642:[完整GC[Psyounggen:128K->0K(2752512K)][ParoldGen:2748528K->2748534K(7340032K)]2748656K->2748534K(10092544K)[PsPermGen:262143K->262143K(262144K)],3.1761780秒][Time:user=31.11 SYS=0.02,Real=3.18秒]

Jul 18 14:53:02 fwprodcontent03 GC.log:3194.820:[GC[Psyounggen:0K->0K(2752512K)]2748534K->2748534K(10092544K),0.0589010秒][times:user=0.38 sys=0.01,real=0.06秒]

Jul 18 14:53:05 fwprodcontent03 GC.log:3194.879:[完整GC[Psyounggen:0K->0K(2752512K)][Paroldgen:2748534K->2748529K(7340032K)]2748534K->2748529K(10092544K)[PsPermgen:262143K->262143K(262144K)],3.0554520秒][Time:User=30.72 SYS=0.03,Real=3.05秒]。...更多.....

提前道谢。

共有1个答案

黄飞翮
2023-03-14

你看过你的gc数据了吗?

[Full GC [PSYoungGen: 0K->0K(2752512K)] [ParOldGen: 2748534K->2748529K(7340032K)] 2748534K->2748529K(10092544K) [PSPermGen: 262143K->262143K(262144K)], 3.0554520 secs]

重要部分是[pspermgen:262143K->262143K(262144K)]。您的permgenspace已耗尽,因此完成了一个完整的GC。因此,进一步增加permgenspace来解决这个问题(也许可以稍微减少堆空间)。

另外,不要经常在生产系统上部署到而不重新启动Tomcat,因为这会很快耗尽permgenspace

 类似资料:
  • 如果我有一个垃圾收集器来跟踪分配的每个对象,并在它们不再有对它们的可用引用时立即释放它们,你还会有内存泄漏吗? 考虑到内存泄漏是指没有任何引用的分配,这不是不可能的吗?还是我遗漏了什么? 编辑:所以我认为内存泄漏是您在代码中不再引用的分配。您仍然可以引用的大量累积分配不是我在这里考虑的泄漏。 我也只是在谈论普通的G.C.,已经有一段时间了,但我知道像循环引用这样的案例不会把他们绊倒。我不需要任何语

  • 问题内容: 是什么决定了垃圾收集器何时真正收集?它是在一定时间之后还是在一定数量的内存用完之后发生的吗?还是还有其他因素? 问题答案: 它在确定是时候运行时运行。在世代垃圾收集器中,一种常见的策略是在第0代内存分配失败时运行收集器。也就是说,每次你分配一小块内存(大块通常直接放置在“旧”代中)时,系统都会检查gen-0堆中是否有足够的可用空间,如果没有,则运行GC释放空间以使分配成功。然后将旧数据

  • [GC(分配失败)[defnew:10931K->472K(12288K),0.0053905秒]10931K->10712K(39616K),0.0054285秒][times:user=0.00 sys=0.00,real=0.01秒] [GC(分配失败)[defnew:10712k->472k(12288k),0.0057686秒]20952k->20952k(39616k),0.00580

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄

  • 问题内容: 您可以简单地通过调用Java来进行垃圾回收,但有时这会使应用程序“停滞”。这样垃圾收集并避免停顿是一个坏主意: 还是可能导致更多问题? 问题答案: 是的,在大多数情况下,调用System.gc()是一个非常糟糕的主意。有例外,但例外很少,最好花一些时间来确保自己不会在GC环境中做会损害性能的事情,并且学习并确保自己了解gc的工作方式比尝试自己处理它要好得多。显式调用System.gc(

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。 即使在机器学习应用程序等海量数据应用程序的情况下,ZGC 也具有高性能和高效工作。它确保在处理数据时不会因垃圾收集而长时间停顿。它支持 Linux、Window