gpt4 book ai didi

Java程序(Tomcat)不断吃内存(RES in top)

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:47 25 4
gpt4 key购买 nike

我在一台 4-cpu 和 32GB 内存的 64 位机器上运行 Tomcat(操作系统是 CentOS 6.3)。我启动 Tomcat 的 Java 选项是 -server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

一开始RES使用top只有810MB,而且一直在增加。在此期间,我运行jmap -J-d64 -histo pID 来检查Java 内存堆,我认为gc 工作正常,因为堆峰值为510MB,gc 后约为200MB。但是当top中的RES达到1.1g时,CPU占用率会超过100%,Tomcat会挂掉。

使用 jstack pid 查看 CPU 使用率为 100% 时的转储,一个名为“vm thread”的线程占用了几乎 100% 的 CPU。我用谷歌搜索,它是 JVM gc 线程。所以我的问题是:当 gc 工作正常时,为什么 res 会继续增长?我该如何解决这个问题?谢谢。

最佳答案

可能是 permgen 泄漏。如果您说您的堆保持在 ~500Mb,并且 -XX:MaxPermSize 设置为 512Mb,则完整的 permgen 将为您提供大约 1gb 的内存使用量。

如果您在程序生命周期的后期加载了很多(比如,很多!)jsp,或者您经常使用 String.intern(),则可能会发生这种情况。

按照此主题进行进一步调查:How to dump Permgen?

这个线程用于调整 gc 以清除 permgen What does JVM flag CMSClassUnloadingEnabled actually do?

关于Java程序(Tomcat)不断吃内存(RES in top),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13715966/

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