在eclipse下tomcat中的Heap / PermGen设置问题

时间:2013-05-23 21:55:32

标签: java eclipse garbage-collection jvm permgen

一位同事在Eclipse / Tomcat运行参数中有以下设置,并且一直抱怨堆内存不足:

-XX:PermSize=512M
-XX:MaxPermSize=1024M
-Xmx1024m

如果我理解正确,max PermGenmax Heap都是1 GB。由于PermGen是堆的特殊部分,因此相当于将所有堆分配给PermGen。这是对的吗?

Perm Space vs Heap Space,我可能是对的。这会导致这个问题吗?

Is Java PermGen Space Part of Total VM Memory,我的理解不正确。

2 个答案:

答案 0 :(得分:3)

你是对的。 > PermGen花费512MB,Heap< 512MB可用

使用任何Sun / Oracle JVM附带的JVisualVM连接到正在运行的eclipse进程并检查实际情况

答案 1 :(得分:2)

启用GC日志记录,一旦Eclipse再次崩溃,您将看到问题的原因,日志将显示PermGen的大小。

GC日志记录:-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion

考虑到PermGen是否是Heap的一部分,这实际上取决于您正在运行的Hotspot的版本。 GC算法控制PermGen的大小,所以即使你设置MAX = 1GB,它也可能永远不会那么大,你还可以因为其他问题而得到OOM。