1、场景: 在Linux 部署生产系统环境时,在启动运行 搭建好的tomcat时,报错如下
OutOfMemoryError: PermGen space 永久保存区域
这种情况发生的原因是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与Permanent Generation space有关。
解决这类问题有以下两种办法:
1. 增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。
在项目中大多情况下都需要在tomcat6.0的启动文件中catalina.sh 或catalina.bat 增加下面的一行:
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"
2. 如果tomcat部署了多个应用,并且这些应用都使用了相同的jar,可以将共同的jar移到tomcat的lib下,减少类的重复加载
2、在 IDE环境中,时不时 报出 OutOfMemoryError: Java heap space 堆栈溢出
解决这类问题有两种思路:
1. 减少不必要地对象的创建,尽可能不要在循环中重复创建对象。
2. 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m
3、OutOfMemoryError:unable to create new native thread
这种情况在Java线程个数很多的情况下容易发生
如何监视jvm内存?
使用jvisualvm