开发项目中会遇到Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小、年轻代大小、每个线程大小参数进行调优的,具体如下:
一、在Tomcat 启动脚本(catalina.sh/catalina.bat)首行添加如下配置即可解决此问题
JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=512m"
1:-Xms 堆空间初始大小
2:-Xmx 堆空间最大数值
3:-Xmn 年轻代的堆大小
4:-Xss 每个线程堆大小
二、JVM堆大小的默认最大和最小值(参考)
操作系统及JVM类型
|
初始堆的大小(Xms)
|
最大堆的大小(Xmx)
|
Linux/Solaris,32位客户端
|
16MB
|
256MB
|
Linux/Solaris,32位服务器
|
64MB
|
取1GB和物理内存大小1/4二者中的最小值
|
Linux/Solaris,64位服务器
|
取512MB和物理内存大小1/64二者中的最小值
|
取32GB和物理内存大小1/4二者中的最小值
|
MacOS,64位服务器型JVM
|
64MB
|
取1GB和物理内存大小1/4二者中的最小值
|
32位Window系统,客户端型JVM
|
16MB
|
256MB
|
64位Window系统,客户端型JVM
|
64MB
|
1GB和物理内存大小1/4二者中的最小值
|
三、一般性调优办法
-Xmx 和-Xms 一般设置为一样大小,这样能稍微提高GC的运行效率,因为他/她不再需要估算堆是否需要调整大小了