我们遇到了Java.lang.OutOfMemoryError: PermGen空间错误,在查看tomcat JVM参数时,除了-Xms
和-Xmx
参数之外,我们还指定了-XX:MaxPermSize=128m
。经过一些分析之后,我可以看到在PermGen空间上偶尔会发生垃圾收集,从而使其免于满负荷运行。
我的问题是:如果我也指定-XX:PermSize
,除了增加-XX:MaxPermSize
之外,还有什么不同?我知道总内存应该是Xmx+maxPermSize,但是当指定了-XX:MaxPermSize
时,为什么-XX:PermSize
应该是而不是,还有什么其他原因吗?
如果你有处理这些JVM参数的实际经验,请一定要分享。
ps。JVM是HotSpot 64位服务器VM版本16.2-b04
发布于 2011-12-02 20:44:09
JVM指定将在-XX:PermSize
启动期间分配的初始大小。如有必要,JVM将分配给-XX:MaxPermSize
。
发布于 2011-12-02 22:59:21
通过使用-XX:PermSize
和-Xms
等参数,您可以调优性能,例如,应用程序的启动。我最近没有看过它,但是几年前-Xms
的默认值大约是32MB (我想),如果你的应用程序需要更多的内存,它会触发一系列的内存填充周期-完全垃圾收集-增加内存等等,直到它加载了它需要的一切。此周期可能不利于启动性能,因此立即分配所需的编号可以提高启动性能。
类似的循环也适用于永久生成。因此,调整这些参数可以改善启动(以及其他)。
警告当涉及到内存分配,划分eden空间和老一代时,JVM有很多优化和智能,所以不要做像-Xms
等于-Xmx
或者-XX:PermSize
等于-XX:MaxPermSize
这样的事情,因为这会删除一些JVM可以应用于其分配策略的优化,从而降低你的应用程序的性能,而不是提高它。
一如既往:进行重要的测量以证明您的更改确实提高了整体性能(例如,在使用应用程序期间,改善启动时间可能会对性能造成灾难性的影响)
发布于 2011-12-03 00:15:40
如果您正在进行一些性能调优,通常建议将-XX:PermSize
和-XX:MaxPermSize
设置为相同的值,以提高JVM
效率。
以下是一些信息:
如果使用的是CMS
GC
,还可以指定-XX:+CMSClassUnloadingEnabled
以启用类卸载选项。这可能有助于降低Java.lang.OutOfMemoryError: PermGen space
的概率。
https://stackoverflow.com/questions/8356416
复制相似问题