gpt4 book ai didi

java - 缩小幸存者空间导致持续的完整 GC

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:32 24 4
gpt4 key购买 nike

我在运行 Tomcat 服务器时遇到过这种令人不安的经历:

  • 我们的 Hudson 服务器;
  • 我们网络应用程序的暂存版本,每天重新部署 5-8 次。

问题是我们最终会进行连续的垃圾回收,但老年代还远远没有被填满。我注意到幸存者空间几乎不存在,垃圾收集器的输出类似于:

[GC 103688K->103688K(3140544K), 0.0226020 secs]
[Full GC 103688K->103677K(3140544K), 1.7742510 secs]
[GC 103677K->103677K(3140544K), 0.0228900 secs]
[Full GC 103677K->103677K(3140544K), 1.7771920 secs]
[GC 103677K->103677K(3143040K), 0.0216210 secs]
[Full GC 103677K->103677K(3143040K), 1.7717220 secs]
[GC 103679K->103677K(3143040K), 0.0219180 secs]
[Full GC 103677K->103677K(3143040K), 1.7685010 secs]
[GC 103677K->103677K(3145408K), 0.0189870 secs]
[Full GC 103677K->103676K(3145408K), 1.7735280 secs]

重启Tomcat前的堆信息为:

Attaching to process ID 10171, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 14.1-b02

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 3221225472 (3072.0MB)
NewSize = 2686976 (2.5625MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 268435456 (256.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 1073479680 (1023.75MB)
used = 0 (0.0MB)
free = 1073479680 (1023.75MB)
0.0% used
From Space:
capacity = 131072 (0.125MB)
used = 0 (0.0MB)
free = 131072 (0.125MB)
0.0% used
To Space:
capacity = 131072 (0.125MB)
used = 0 (0.0MB)
free = 131072 (0.125MB)
0.0% used
PS Old Generation
capacity = 2147483648 (2048.0MB)
used = 106164824 (101.24666595458984MB)
free = 2041318824 (1946.7533340454102MB)
4.943684861063957% used
PS Perm Generation
capacity = 268435456 (256.0MB)
used = 268435272 (255.99982452392578MB)
free = 184 (1.7547607421875E-4MB)
99.99993145465851% used

传递给 Tomcat 的相关 JVM 标志是:

-verbose:gc -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFFE -Xmx3g -XX:MaxPermSize=256m

请注意,幸存者空间在启动时的大小约为 40 MB。

如何避免这个问题?


更新:

JVM版本是

$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02, mixed mode)

我将研究增加 PermGen 的大小,看看是否有帮助 - 幸存者空间的大小可能无关。

最佳答案

关键可能是 PS Perm Generation,它是 99.999%(只有 184 bytes 256***MB***免费)。

通常,我建议您给它更多的 perm gen,但您已经给了它 256MB,这应该足够了。我的猜测是您在某些代码生成库中存在内存泄漏。 Perm Gen 主要用于类的字节码。

关于java - 缩小幸存者空间导致持续的完整 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com