tomcat 内存溢出缘由分析及解决

1、错误提示:java.lang.OutOfMemoryError: Java heap spacejava

【缘由分析】浏览器

tomcat默承认以使用内存为128MB,在较大型的应用项目中不足以知足运行要求,在日志中常出现内存溢出的错误,Out of Memory(系统内存不足)的异常,浏览器显示500错误,一般增长堆栈内存便可解决此问题。tomcat

【解决方法】服务器

Windows 环境:函数

1)免安装版直接在catalina.bat文件头部增长如下行便可:工具

set JAVA_OPTS="-Xms256m -Xmx512m"

2)安装版tomcat由于使用的内存参数写在注册表中,能够直接修改注册表,也能够经过tomcat配置工具性能

Linux 环境:spa

直接在catalina.sh文件头部增长如下行便可:日志

JAVA_OPTS="-Xms256m -Xmx512m"

其中,-Xms设置初始化最小内存大小,-Xmx设置可使用的最大内存大小,通常为了下降垃圾回收次数而影响性能这两个值设置相同值。code

2、错误提示: java.lang.OutOfMemoryError: PermGen space

【缘由分析】

PermGen space的全称是 Permanent Generation space,是指内存的永久保存区域,这块内存主要是被 JVM 存放 Class 和 Meta 信息的, Class 在被 Loader 时就会被放到 PermGen space 中, 它和存放类实例(Instance)的 Heap 区域不一样, GC(Garbage Collection)垃圾回收不会在主程序运行期对 PermGen space 进行清理,因此若是你的应用中不少 Class 的话就可能致使 PermGen space 错误,这种错误常见在 Web 服务器对 JSP 进行 pre compile 的时候。 若是你的 WEB APP 下都用了大量的第三方jar, 其大小超过了 JVM 默认的大小(4M),那么就会产生此错误信息。

【解决方法】

Windows 环境:

1)免安装版tomcat在catalina.bat文件头部增长如下行便可():

set JAVA_OPTS="-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

2)安装版tomcat方法同第一种内存溢出解决方法相同

Linux 环境:

JAVA_OPTS="-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

3、错误提示:java.lang.StackOverflowError

【缘由分析】

函数的调用过程都体如今堆栈和退栈上。调用构造函数的“层”太多,以致于把栈区溢出了。

通常栈区都远小于堆区,由于函数调用过程每每不会多于上千层,而即使每一个函数调用要1K的空间,那么栈区也不过须要1MB的空间。一般栈区的大小是1-2MB。

递归也不要递归层数过多,也容易致使溢出。

【解决方法】

建议修改程序或更换较新版本的tomcat。

相关文章
相关标签/搜索