1.tomcat增大jdk运行内存
在catalina.bat中添加set JAVA_OPTS=-Xms128m -Xmx800m -XX:PermSize=128m -XX:MaxPermSize=800m
rem ----- Execute The Requested Command ---------------------------------------
set JAVA_OPTS=-Xms800m -Xmx1024m -XX:PermSize=800m -XX:MaxPermSize=1024m
echo Using CATALINA_BASE: "%CATALINA_BASE%"
echo Using CATALINA_HOME: "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
2.eclipse或则myeclipse:
window->preferences->java->server->Runtime environment 中选择server->edit->installed jres->edit 在Defaults VM arguments:-Xms128m -Xmx800m -XX:PermSize=128m -XX:MaxPermSize=800m 即可,
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
可在jdk->bin->jvisualvm.exe中查看配置效果,图例如下:
附:
JVM堆内存分为2块:Permanent Space 和 Heap Space。
Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。
Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻代(Young Generation)。年老代和年轻代的划分对垃圾收集影响比较大。
第一种OutOfMemoryError: PermGen space:
设置的内存参数Xmx过小或程序的内存泄露及使用不当问题;
- 增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。
- 如针对tomcat7.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行:
JAVA_OPTS=" -XX:PermSize=128M -XX:MaxPermSize=800m"
如果是windows服务器还可以在系统环境变量中设置,变量名:JAVA_OPTS 变量值:-server -Xms128m -Xmx800m -XX:PermSize=128M -XX:MaxPermSize=800m。 - 清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。
第二种OutOfMemoryError: Java heap space
发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关。
1.检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。
2.增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms128m -Xmx800m
eclipse开发环境:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m