tomcat 内存溢出原因分析及解决
一、错误提示:java.lang.OutOfMemoryError: Java heap space
【原因分析】
tomcat默认可以使用内存为128MB,在较大型的应用项目中不足以满足运行要求,在日志中常出现内存溢出的错误,Out of Memory(系统内存不足)的异常,浏览器显示500错误,通常增加堆栈内存即可解决此问题。
【解决方法】
Windows 环境:
1)免安装版直接在catalina.bat文件头部增加以下行即可:
set JAVA_OPTS="-Xms256m -Xmx512m"
2)安装版tomcat因为使用的内存参数写在注册表中,可以直接修改注册表,也可以通过tomcat配置工具
Linux 环境:
直接在catalina.sh文件头部增加以下行即可:
JAVA_OPTS="-Xms256m -Xmx512m"
其中,-Xms设置初始化最小内存大小,-Xmx设置可以使用的最大内存大小,一般为了降低垃圾回收次数而影响性能这两个值设置相同值。
二、错误提示: 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"
三、错误提示:java.lang.StackOverflowError
【原因分析】
函数的调用过程都体现在堆栈和退栈上。调用构造函数的“层”太多,以至于把栈区溢出了。
一般栈区都远小于堆区,因为函数调用过程往往不会多于上千层,而即便每个函数调用要1K的空间,那么栈区也不过需要1MB的空间。通常栈区的大小是1-2MB。
递归也不要递归层数过多,也容易导致溢出。
【解决方法】
建议修改程序或更换较新版本的tomcat。
tomcat 内存溢出原因分析及解决的更多相关文章
- tomcat内存溢出 PermGen space
1. java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出. PermGen space的全称是Permanent Gene ...
- Tomcat内存溢出的三种情况及解决办法分析
Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种 ...
- Tomcat 内存溢出对应解决方式
1.Tomcat内存溢出的原因 生产环境中Tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...
- 大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决
tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ...
- [转]一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 前言 在平时开发.测试过程中.甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序 ...
- myeclipse tomcat内存溢出解决方法
Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出.MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题.在 tomcat的catalina.bat ...
- eclipse启动tomcat内存溢出的解决方式
eclipse启动tomcat内存溢出的解决方式 ——IT唐伯虎 摘要:eclipse启动tomcat内存溢出的解决方式. 1.打开Run Configurations 2.在VM arguments ...
- linux中tomcat内存溢出解决办法
用命令 tail -f /root/apache-tomcat-6.0.20/logs/catalina.out(需要找到tomcat路径) 查看日志,查看是否有错误 linux中tomcat内存溢出 ...
- 虚拟机选择配置:解决tomcat内存溢出
用于解决java.tomcat内存溢出:-server -XX:PermSize=128M -XX:MaxPermSize=256m
随机推荐
- [Algorithom] Shuffle an array
Shuffling is a common process used with randomizing the order for a deck of cards. The key property ...
- 批处理文件——多个QQ一键登录
偶然看到有的同学登录PC的QQ,发现他有很多QQ,每登录一个要切换一个,虽然记住了密码,但还是不方便,于是想通过批处理来实现“一键登录”的功能.以下内容为本文假想,如有雷同,实属巧合! 具体的实现步骤 ...
- block高级功能
/* -*- c++ -*- */ /* * Copyright 2004,2007,2009,2010,2013 Free Software Foundation, Inc. * * This fi ...
- T-SQL 数据库的创建
create database databaseNameon primary( Name =dbName1, FileName='C:\mydatabase1\dbName1.mdf', Siz ...
- 你不知道的js技巧
JS进阶 说起这个应该算是老生常谈了吧.所谓的高级,其实就是讲了一些我们平常用不到(或许用了不知道),但是非常实在的东西.算是熟练掌握js的一个必经road吧. 检测函数类型 其实检测函数的类型应该算 ...
- xcode9.2 objective-c install (mac 10.12.6)
1. xcode下载: https://download.developer.apple.com/Developer_Tools/Xcode_9.2/Xcode_9.2.xip 2. 点击默认安装即可 ...
- ContentObserver与DatasetObserver区别
1. ContentObserver ContentObserver主要是通过Uri来监测特定的Databases的表,如果该Databases表有变动则会通知更新cursor中的数据. 如果 ...
- 如何修改Linux系统的 /etc/ssh/sshd_config 文件 "/etc/ssh/sshd_config" E212: Can't open file for writin
第一步:我们使用命令行vim /etc/ssh/sshd_config 执行修改,强制保持 :wq! 系统不让我们修改这个文件 "/etc/ssh/sshd_config" ...
- mysql init_connect
init_connect 服务器为每个连接的客户端执行的字符串.字符串由一个或多个SQL语句组成.要想指定多个语句,用分号间隔开.例如,每个客户端开始时默认启用autocommit模式.没有全局服务器 ...
- PsExec使用
01. 创建一个 Process Process.FileName ="文件路径及文件名称" Process.Arguments ="\\PC PI地址 -u 用户名 - ...