`

tomcat OutOfMemory 解决办法

阅读更多
OutOfMemory 常见错误有以下几种:
1.tomcat:java.lang.OutOfMemoryError: PermGen space

2.tomcat:java.lang.OutOfMemoryError: Java heap space

3.weblogic:Root cause of ServletException java.lang.OutOfMemoryError

4.java:java.lang.OutOfMemoryError



常见错误原因:

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

3.代码中存在死循环或循环产生过多重复的对象实体;

4.使用的第三方软件中的BUG;

5.启动参数内存值设定的过小;

tomcat中java.lang.OutOfMemoryError: Java heap space异常处理

一、分析:Heap size JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值, 其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可 进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。 提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。 提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

二、解决方法:手动设置Heap size

windows中解决:
   编辑tomcat的bin下的catalina.bat文件,在
rem ----- Execute The Requested Command ------------后面增加一句:

set JAVA_OPTS=-Xms64m -Xmx256m
注意:没有单引号

linux中解决:
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

tomcat中java.lang.OutOfMemoryError: PermGen space异常处理

一、分析: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)那么就会产生此错误信息了。

二、解决方法: 手动设置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 文档重复占用内存的目的。

weblogic中java.lang.OutOfMemoryError异常处理

错误提示: "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


Eclipse运行Jboss时java.lang.OutOfMemoryError:PermGen space异常处理

在Eclipse中运行Jboss时,出java.lang.OutOfMemoryError:PermGen space的错误
解决方法:
1)点击debug图标旁边的小箭头;
2)点击”Debug Configurations…”菜单项;
3)选左边的“Generic Server”树下面的“JBoss v4.2 at localhost”;
4)点击右边的“Arguments”Tab页签,在“VM arguments”中添加:
-Dprogram.name=run.bat -Djava.endorsed.dirs="D:/JBoss405/bin/../lib/endorsed" -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
5)如果你是以命令行模式或者直接点击“run.bat”来运行JBoss,那你就要在 bin/run.conf 文件中对JVM选项作修改了,找到 JAVA_OPTS="-Xms128m -Xmx512m…” 这一段,然后在后面加上 “ -XX:PermSize=64m -XX:MaxPermSize=256m”。保存就OK了。
6)注意:其中128、512、64和256等数字可以根据自己机器的配置来做一些相应的调整,然后点击“Apply”就可以了。

1. 各个参数的含义什么?

参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

◆堆(Heap)和非堆(Non-heap)内存

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。

◆堆内存分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

◆非堆内存分配

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

◆JVM内存限制(最大值)

首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?

通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置JVM参数导致程序无法启动主要有以下几种原因:

1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;

2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
1
1
分享到:
评论
2 楼 可怜的猫 2013-10-09  
谢谢指导,奈何我是做网站维护的,总不能把费力的去挑人家代码的错吧?只能在这些事后措施上找办法
1 楼 youjianbo_han_87 2013-09-29  
这些是事后的手段,首先要找出确切的原因。而不是盲目的调这些参数。如果查到确切原因,那调参数,只要几分钟。如果没找到原因,这样调参数试,可能1天搞不定。

相关推荐

    tomcat out of memory

    标题 "Tomcat Out of Memory" 指的是在运行Apache ...通过以上分析和解决方案,我们可以有效地处理和预防"Tomcat Out of Memory"问题,确保服务器稳定运行。持续监控、优化和学习将有助于提升系统的性能和可靠性。

    tomcat out of memory solution

    标题与描述中的关键词“Tomcat Out of Memory Solution”指向了在运行Tomcat服务器时遇到内存溢出错误(Out of Memory Error)的解决方法。在IT领域,尤其是Java应用服务器环境中,Tomcat作为一款广泛使用的开源轻量...

    tomcat 出现 OutOfMemoryError 的解决方法

    ### Tomcat 出现 OutOfMemoryError 的解决方法 #### 一、问题概述 在部署应用至 Tomcat 服务器时,经常会遇到一个常见的错误:`java.lang.OutOfMemoryError: PermGen space`。该错误表明 Java 虚拟机 (JVM) 的永久...

    OutOfMemory的一个解决方法

    针对上述问题,尤其是在Web应用环境中,通过调整Tomcat服务器的内存参数是一种有效的解决方案。具体步骤如下: 1. **定位配置文件**:首先,需要找到Tomcat安装目录下的`bin`文件夹,该文件夹中包含了用于启动和...

    tomcat端口被占用解决办法

    ### Tomcat端口被占用解决办法详解 在日常的软件开发与运维工作中,经常会遇到Tomcat服务器启动失败的问题,其中一个常见的原因就是端口被占用。本文将详细介绍如何解决Tomcat端口被占用的问题,帮助大家快速定位并...

    解决tomcat配置ssl错误的解决办法

    解决 Tomcat 配置 SSL 错误的解决办法 在 Tomcat 服务器中配置 SSL 加密连接是非常重要的,然而在 Tomcat 6.0.33 版本中,默认启用了 APR(APR 是通过 JNI 访问的可移植库,可以提高 Tomcat 的性能和伸缩性),这...

    Tomcat无法正常启动的解决办法.zip

    Tomcat无法正常启动的解决办法 教你如何解决Tomcat无法正常启动 欢迎下载

    tomcat端口被占用解决办法1

    标题“Tomcat端口被占用解决办法1”指的是在运行Tomcat服务器时遇到的一个常见问题,即8080端口已经被其他进程占用,导致Tomcat无法正常启动。8080是默认的Tomcat HTTP服务端口,当这个端口被其他应用程序使用时,...

    eclipse右下角一直显示tomcat Starting的解决办法

    eclipse右下角一直显示tomcat Starting的解决办法

    Tomcat配置解决跨域问题

    【标题】:“Tomcat配置解决跨域问题” 在Web开发中,跨域(Cross-Origin)是一种常见的安全限制,它阻止浏览器从一个源加载资源到另一个不同的源。这主要是为了防止恶意脚本通过注入来窃取数据。然而,在进行前后...

    tomcat跨域解决方案

    ### Tomcat跨域解决方案 #### 一、背景与问题描述 在现代Web开发中,由于浏览器的安全策略限制,不同源之间的资源访问会受到限制,这种现象被称为“同源策略”(Same-Origin Policy)。同源策略是为了保护用户数据...

    tomcat问题解决

    3. **内存设置**:如果Tomcat出现“Out of Memory”错误,可能需要调整JVM的内存参数。在`bin/catalina.sh`(Unix/Linux)或`bin/catalina.bat`(Windows)文件中,通过设置`CATALINA_OPTS`或`JAVA_OPTS`来增加堆...

    tomcat6-Memory-set-.rar_memory

    当处理的数据量增加,如果不适当地配置内存,Tomcat可能会遇到内存溢出(Out-of-Memory)错误,这将导致服务器崩溃或性能显著下降。因此,理解如何调整Tomcat6的内存设置至关重要。这包括设置JVM(Java虚拟机)的堆...

    Ubuntu上Tomcat部署war包失败的解决办法.docx

    "Ubuntu 上 Tomcat 部署 war 包失败的解决办法" 本文将详细介绍 Ubuntu 上 Tomcat 部署 war 包失败的解决办法,涵盖了 jdk 版本不对、war 包中的库与 Tomcat 自带的库矛盾、Tomcat 初始页中的推举工具、日志文件的...

    解决tomcat中文乱码问题

    解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助

    Eclipse运行TOMCAT 出现在a java exception has occurred的解决办法。

    Eclipse运行TOMCAT出现"a java exception has occurred"的解决办法 Eclipse是一款功能强大且广泛应用的集成开发环境(IDE),它支持多种编程语言,包括Java、C++、Python等。TOMCAT则是一款流行的Java Web服务器,...

Global site tag (gtag.js) - Google Analytics