我在 4-cpu 和 32GB 内存的 64 位机器上运行 Tomcat(操作系统是 CentOS 6.3)。我启动 Tomcat 的 Java 选项是-server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m
一开始,使用top的RES只有810MB,而且还在不断增加。在此期间,我运行jmap -J-d64 -histo pID
检查 Java 内存堆,我认为 gc 工作正常,因为堆峰值为 510MB,gc 后约为 200MB。但是当 RES in top hit 1.1g 时,CPU 使用率会超过 100%,Tomcat 会挂掉。
用于在 CPU使用jstack pid
率为 100% 时查看转储,名为“vm 线程”的线程几乎占用了 100% 的 CPU。我用谷歌搜索,它是 JVM gc 线程。所以我的问题是:为什么当 gc 工作正常时 res 会继续增长?我该如何解决这个问题?谢谢。