文档章节

tomcat内存溢出OutOfMemoryError

郏高阳
 郏高阳
发布于 2013/04/24 14:12
字数 567
阅读 362
收藏 6

出现OutOfMemoryError PermGen space系统错误,通过在网上查阅资料,发现这个错误并不是Tomcat的问题,而JVM设计自身的一个缺陷,JVM把内存分了不同的区, PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,类加载的时候就存放在这个区域中。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收! 

      老外一直认为这是sun JVM的一个bug,曾有这样的评价:“A bug this critical is open since 2003? Absolutely shameful”--  我觉得SUN在这个BUG上确实有些丢脸。没想到至今这个问题还没未能解决,有人给出最好的解决方法是不使用JDK,使用BEA的JRokit,当然现在Oracle,BEA,SU已经成为一家人了,我想这个问题应该会更快有更好的解决方案。

好了还是说说如何解决问题吧,网上大量的资料说在tomcat这样设置:SET JAVA_OPTS= -Xms64m -Xmx512m,但经过本人的测试,没有一点作用,详细看了JVM内存的分配机制后才知道,-Xms和--Xmx是调整Java heap space(即堆内存)的大小,ava heap space区域中存放对象,GC会收集这块区域。

如果出现的异常类型是:OutOfMemoryError: Java heap space,那应该设置 SET JAVA_OPTS= -Xms64m -Xmx512m。

如果出现的异常类型是:OutOfMemoryError  PermGen space,那应该设置set JAVA_OPTS=-Xms128m -Xmx512m  -XX:PermSize=128M -XX:MaxPermSize=256m

常见的有两种设置方法:

如果在开发环境中启动tomcat,以eclipse为例:选择window->Preferences->MyEclipse-servers-Tomcat->JDK 在右侧框Optional Java  VM arguments中加入:-Xms128m -Xmx512m  -XX:PermSize=128M -XX:PermSize=256M

      如果独立启动tomcat,修改tomcat/bin/catalina.bat文件,查找set JAVA_OPTS,找到后把这一行修改为:

set JAVA_OPTS=-Xms128m -Xmx512m  -XX:PermSize=128M -XX:MaxPermSize=256M,设置的时候要注意:-Xms+X:PermSize不能大于系统支持的最大JVM的大小。具体大小根据自己内存大小调整吧。

© 著作权归作者所有

郏高阳

郏高阳

粉丝 101
博文 153
码字总数 112268
作品 1
黄浦
程序员
私信 提问
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

本来想写一写项目中遇到的内存溢出的问题,看了好多博客,发现有一篇特别好的博客,拾人牙慧,共享分享。 转载:http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryErro...

mengdonghui123456
2017/02/07
0
0
部署shop++,启动eclipse遇到内存溢出。

部署项目到tomcat,启动eclipse,控制台报OutOfMemoryError: PermGen space错误。网上找了一些资料,需要加大tomcat内存设置。 一、OutOfMemoryError: Java heap space 是堆溢出(存放java初始...

Waterxvb
2016/05/06
31
0
tomcat内存溢出问题记录

问题说明: 公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: 上面报错是由于tomcat内存溢出引起的: Tomcat默认可以使用的内存为128MB...

吞吞吐吐的
2017/10/11
0
0
tomcat 产生heapdump文件配置

系统有时会遇到OutOfMemoryError,Java堆溢出了。我们需要找到造成OutOfMemoryError原因。一般有两种情况: 1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收; 2、内存溢出,内存...

江江的喵
2015/12/17
484
0
linux/centos解决Tomcat内存溢出

Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给APP。当APP需要的内存超出内存的最大值时虚拟机就会提示内存溢出...

宛珩
2016/02/16
368
0

没有更多内容

加载失败,请刷新页面

加载更多

x002-语言元素

变量命令规则 硬性规则: 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。 大小写敏感(大写的a和小写的A是两个不同的变量)。 不要跟关键字(有特殊...

伟大源于勇敢的开始
今天
4
0
nginx反向代理配置

nginx配置文件位置/usr/local/nginx/conf/nginx.conf 配置文件修改: # cd /usr/local/nginx/conf # vim nginx.conf server {listen 80;server_name localhost;#charset k......

行者终成事
今天
5
0
OSChina 周日乱弹 —— 这是假的,和我之前的不一样

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
15
1
Rust学习笔记一 数据类型

写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差。 自学了Java、Kotlin、Python、...

MusiCodeXY
今天
5
0
Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部