java.lang.OutOfMemoryError 这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM 内存过小、程序不严密,产生了过多的垃圾。导致 OutOfMemoryError 异常的常见原因有以下几种:
此错误常见的错误提示:
解决 java.lang.OutOfMemoryError 的方法有如下几种:
一、增加 jvm 的内存大小。方法有: 1)在执行某个 class 文件时候,可以使用java -Xmx256M aa.class 来设置运行 aa.class 时 jvm 所允许占用的最大内存为256M。 2)对 tomcat 容器,可以在启动时对 jvm 设置内存限度。对 tomcat,可以在 catalina.bat 中添加:
set CATALINA_OPTS=-Xms128M -Xmx256M
set JAVA_OPTS=-Xms128M -Xmx256M
或者把 %CATALINA_OPTS% 和 %JAVA_OPTS% 代替为 -Xms128M -Xmx256M
3)对resin容器,同样可以在启动时对jvm设置内存限度。在bin文件夹下创建一个startup.bat文件,内容如下:
@echo off
call "httpd.exe" "-Xms128M" "-Xmx256M"
:end
其中 -Xms128M 为最小内存,-Xmx256M 为最大内存。
二、 优化程序,释放垃圾。
主要包括避免死循环,应该及时释放种资源:内存、数据库的各种连接,防止一次载入太多的数据。导致 java.lang.OutOfMemoryError 的根本原因是程序不健壮。因此,从根本上解决 Java 内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。 遇到该错误的时候要仔细检查程序,嘿嘿,遇多一次这种问题之后,以后写程序就会小心多了。
需要重点排查以下几点:
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)那么就会产生此错误信息了。 解决方法: 手动设置 MaxPermSize 大小修改 TOMCAT_HOME/bin/catalina.sh 在
echo "Using CATALINA_BASE: $CATALINA_BASE"
上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下,这样可以达到减少 jar 文档重复占用内存的目的。
错误提示: Root cause of ervletException java.lang.OutOfMemoryError 解决办法:调整 bea/weblogic/common 中 CommEnv 中参数
:sun
if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
set JAVA_VM=-client
set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:sun_prod_mode
set JAVA_VM=-server
set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m
goto continue
产生内存溢出的原因:
出现这个错误,一般是因为 JVM 物理内存过小。默认的 Java 虚拟机最大内存仅为64兆,这在开发调试过程中可能没有问题,但在实际的应用环境中是远远不能满足需要的,除非你的应用非常小,也没什么访问量。否则你可能会发现程序运行一段时间后包 java.lang.OutOfMemoryError 的错误。因此我们需要提升 resin 可用的虚拟机内存的大小。
解决方法:
修改 /usr/local/resin/bin/httpd.sh 中的 args 选项 添加参数 -Xms(初始内存)和 -Xmx(最大能够使用内存大小)可以用来限制 JVM 的物理内存使用量。例如:
args="-Xms128m -Xmx256m"
设置后,JVM 初始物理内存是 128m,最大能使用物理内存为 256m。这两个值应该由系统管理员根据服务器的实际情况进行设置。

