今天在做公司一个工程2个版本的运行时,突然出现新版的工程在tomcat中内存溢出。
因为错误比较明显,但也经过了一些折腾。
我的tomcat版本为最新的7.0.34,eclipse为3.7
在tomcat的wiki上其实对内存溢出和内存错误已经有一定的分析和说明
tomcat内存出错的一些原因:
1、建立的过多的对象,导致堆区内存不足
2、有代码被对象持有而导致垃圾收集器无法清理
3、超过了系统文件的大小限制,这样你需要提高你的权限或者用一个不受限制的。
4、你工程的线程数目过多,某些系统在同一个进程里对线程数目有限制,去看系统文档,和学习怎么提高这个数目
5、系统也许限制了你的进程的内存大小
6、JVM有bug,一般在低版本的jvm才出现
还介绍了内存溢出的一些常见处理方式
1、如果发现一个servlet装载大量的内容进入内存,你应该检查下你的代码是不是有bug
2、手动增加堆内存,导致没有空间去创建必须创建的那些线程所需要的栈空间,每个系统对线程创建所要消耗的栈默认不太相同,但是基本都高于2M,而且这个不能通过设置-Xss去减少
所以有一个规则,在32位系统下,对堆内存的分配一般不超过1024M
3、深度递归算法会导致内存出问题,因为方法信息都在栈中,所以一个可以用-Xss增加栈空间,另一个最好去优化你的算法
4、加载了大量的jar包或者同时维持几个项目将消耗你的非堆内存,在这种情况下-XX:MaxPermSize 去增加你的非堆内存
5、强引用导致垃圾收集器无法回收内存。可能会出现jsp重编译,工程重新加载,这将消耗大量时间,只到非堆内存得到清理或者内存溢出。
我今天的tomcat抛出的就是非堆内存溢出,可能是因为新的版本又加了一些jar包的缘故。
处理过程
第一次折腾:在tomcat\bin\catalina.bat 中 set JAVA_OPTS=%JAVA_OPT% -server -XX:PermSize=128m -XX:MaxPermSize=1024m
或者直接写 set JAVA_OPTS= -XX:PermSize=128m -XX:MaxPermSize=1024m
直接在tomcat启动,OK,工程正常启动
但是发现eclipse不认账
第二次折腾,打开 open launch configuration
点击Arguments选项卡
VM arguments 中添加
-Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=1024
OK,解决完毕
- 大小: 76.5 KB
分享到:
相关推荐
Tomcat内存溢出三种情况及解决办法,不同的异常采用不同的方式解决,不能盲目的增加内存就可以了。
项目在tomcat下运行时,出现常见的几种内存溢出的解决方案
LINUX部署tomcat内存溢出解决方案 已经使用过了,确实是好用的。
在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。本文就介绍了Tomcat内存溢出的三种情况及解决办法分析
TOMCAT内存溢出之解决方法
myeclipse-tomcat jdk内存溢出,针对myeclipse做的相应的配置
tomcat内存溢出,里面列出集中导出内存溢出的愿意和解决方案。
如果您的tomcat是6.X版本且是安装版的,那么系统设置环境变量是不起作用的,因为这个版本的只能通过点击tomcat6.exe 或tomcat6w.exe才能执行,这种方法可以通过修改注册表能解决:本例是以内存3G为例的。 windows...
Eclipse + Tomcat 内存溢出参数设置
eclipse tomcat启动,内存溢出问题
根据网上总结tomcat内存溢出的各种解决办法,很实用!
本文档记录了本人在不同系统上遇到tomcat内存溢出的各种问题,给出的解决方案。 详细记录。好东西要共享才有价值哦!
tomcat内存溢出处理方法适用于java,开发工具myeclipse或eclipse
按照压缩包里面的操作说明把对应文件拷贝进去就没问题了。
程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了, 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法
NULL 博文链接:https://dreammoon.iteye.com/blog/2210704
tomcat内存溢出分析及解决方案,主要是分析tomcat内存溢出原因及对应的解决方案
tomcat修改JVM内存配置(解决大项目内存溢出问题有效方案)