今天用tomcat启动项目后当我访问项目报错:java.lang.OutOfMemoryError: PermGen space(非堆溢出/永久保存区域溢出)
通过百度知道了报这个错误的原因是:web app下面用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了;
另外从网上看到还有其他两种内存溢出异常:
1.OutOfMemoryError: Java heap space 堆溢出;
异常产生原因:在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息
2.OutOfMemoryError: unable to create new native thread 无法创建新的线程;
异常产生原因:主要是和jvm与系统内存的比例有关。因为JVM已经被系统分配了大量的内存,并且它至少要占用可用内存的一半.
网上设置方法:
基本上都是在tomcat中的bat文件或者sh文件中设置
如:
bat文件:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=512m
sh文件:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=512m"
但是我这样设置后启动tomcat后.访问项目一样的报内存溢出异常;最后通过百度知道可以通过集成开发环境下(我用的eclipse)启动并使用JVM;
打开eclipse的window–preferences–找到Java–installed JRES
编辑当前使用的JRE,在Default VM arguments中输入:-Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m(根据自己内存大小进行修改)
其JVM内存分配设置的参数有四个
-Xmx Java Heap最大值,默认值为物理内存的1/4;
-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn Java Heap Young区大小,不熟悉最好保留默认值;
-Xss 每个线程的Stack大小,不熟悉最好保留默认值;
-XX:PermSize:设定内存的永久保存区域;
-XX:MaxPermSize:设定最大内存的永久保存区域;
-XX:PermSize:设定内存的永久保存区域;
-XX:NewSize:设置JVM堆的‘新生代’的默认大小;
-XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;
tomcat启动加载web项目内存溢出
最新推荐文章于 2021-02-21 19:01:38 发布