`
阅读更多

1、首先是: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
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
Java代码
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m 

 

set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m

或修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

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

解决方法:

1. 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在Java代码
“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:   
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m  

“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

catalina.sh下为:
Java代码
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m" 

JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"


另外看到了另外一个帖子,觉得挺好,摘抄如下:
分析java.lang.OutOfMemoryError: PermGen space

发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用 CBLIB会动态产生很多类。

但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。

于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!


对于以上两个问题,我的处理是:

在catalina.bat的第一行增加:
Java代码
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m  

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

在catalina.sh的第一行增加:
Java代码
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
 
分享到:
评论

相关推荐

    tomcat内存溢出

    【标题】:“Tomcat内存溢出” 在Java应用服务器领域,Tomcat无疑是最受欢迎的开源Web服务器之一。然而,随着应用程序复杂性和负载的增加,Tomcat可能会遇到内存溢出问题,这可能导致服务中断,严重影响系统稳定性...

    Tomcat源码研究.pdf

    - **内存溢出**:Tomcat启动时可能出现内存溢出错误,这通常是因为分配给Tomcat的堆空间不足所致。可以通过调整`catalina.bat`中的`JAVA_OPTS`来增加最大堆空间,例如:`set "JAVA_OPTS=-Xms256m -Xmx512m"`。 - **...

    Java程序内存溢出问题的分析

    很久之前到时弄过这个,现在还真有点不记得了,但这个真的是一个非常有意思的问题,值得好好研究一下。  首先第一反应当然是加上-XX:+PrintGCDetails参数来看具体的GC日志,但是由于程序是tomcat启动的,担心里面...

    tomcat异常结束自动重启脚本

    然而,由于各种原因(如内存溢出、系统资源不足、配置错误等),Tomcat可能会意外终止。为了保证服务的连续性和稳定性,我们需要编写一个批处理脚本来监控Tomcat的状态,并在检测到异常时自动重启Tomcat。 ...

    Tomcat6.0

    - 使用JVM参数调整堆内存大小,例如`-Xms`和`-Xmx`,防止内存溢出。 - 开启JVM的垃圾回收优化,如使用`-XX:+UseConcMarkSweepGC`和`-XX:+UseParNewGC`。 6. **日志管理** - Tomcat的日志信息默认存储在`logs`...

    TOMCAT_6_0_26最新源代码

    例如,调整Connector的maxThreads属性可以控制最大并发连接数,调整JVM堆大小可以防止内存溢出。 9. **错误处理与日志系统** Tomcat的错误处理和日志系统也是源代码的重要部分,可以帮助开发者在出现问题时快速...

    tomcat优化资料

    2. **应用部署优化**:合理拆分应用,避免单一应用过大导致内存溢出,使用热部署技术减少重启对服务的影响。 3. **日志优化**:控制日志级别,避免无用的日志输出消耗系统资源,使用异步日志框架提高性能。 4. **...

    tomcatOutOfMemory错误解决方法共4页.pd

    【描述解析】:“tomcatOutOfMemory错误解决方法共4页.pdf.zip”描述了文件的格式和内容概要,这是一个压缩文件(.zip),里面包含了一个4页的PDF文档,专门针对Tomcat的内存溢出问题提供解决方案。这表明文档将详细...

    jsp源码其他类别动态显示JSP服务器内存的Ajax程序图像版-systemjc

    这不仅有助于发现潜在的性能瓶颈,还能及时调整配置以避免因内存溢出而导致的服务中断。 #### 动态显示JSP服务器内存 该项目的主要功能是动态显示JSP服务器的内存使用情况。具体来说,它利用Ajax技术每隔一定时间...

    jboss的性能优化

    - **队列大小** (`MaximumQueueSize`):设置等待执行的任务队列的最大长度,有助于避免任务堆积导致的内存溢出。 这些设置对于保持系统稳定运行至关重要。 ##### 5. JVM启动参数调整 修改`.jboss\bin\run.sh`文件...

    java架构师面试问题

    内存泄露是指程序中已分配的内存无法正常释放,导致内存持续消耗,而内存溢出是系统可用内存不足,无法为新分配的内存块找到空间。内存泄露通常发生在长时间运行的应用中,当不再需要的对象仍然被引用,无法被垃圾...

    基于JAVA技术的搜索引擎的研究报告及实现收藏.doc

    此外,JAVA的内存管理和垃圾回收机制也有助于在大规模数据处理中避免内存溢出。 **2.2.2 索引与搜索** 索引构建过程中,JAVA的集合框架(如ArrayList和HashMap)和并发库(如ConcurrentHashMap)为构建高性能索引...

    测试技术对网站中服务器端质量保证研究

    而缓存区溢出攻击则是通过向系统输入大量数据,试图覆盖内存中的控制信息,造成程序运行错误,甚至执行攻击者的代码。这些都是在进行安全测试时需要特别关注的方面。 文章中提到的DDoS攻击,即分布式拒绝服务攻击,...

    commons文件上传源码

    对于大文件或为了防止内存溢出,它会写入到临时文件系统。用户可以通过配置参数来控制这些策略。 3. **文件部分处理**:每个上传的文件都被视为一个`Part`对象,包含文件名、类型、大小等信息。开发者可以对这些...

    solr从入门到精通教程

    - 内存使用考量:分析了出现内存溢出错误的原因,并提出了如何优化分配给Java虚拟机的内存。 7. 常见问题解答(FAQ) - 乱码或查不到结果的排查方法:给出了排查此类问题的多种方法。 综合这些内容,可以看出这份...

    commons-fileupload-1.4-src.zip

    对于大文件,库会将其写入临时文件以避免内存溢出。可以通过配置参数来调整这些阈值。 3. **文件大小限制**:可以设置上传文件的最大大小限制,防止恶意用户上传过大的文件,导致服务器资源耗尽。 4. **进度监听**...

    FileUpload

    2. **临时文件存储**:在处理大文件上传时,组件会将文件内容暂时保存在服务器的磁盘上,以避免内存溢出。用户可以通过配置来指定临时文件的存储位置和清理策略。 3. **内存管理**:FileUpload提供了一种机制,允许...

    java毕业设计之网上招投标系统源码(ssm+mysql+说明文档).zip

    开发者可以通过HTTPS协议增强数据传输的安全性,使用文件流技术处理大文件上传,避免内存溢出。 最后,评标管理涉及对投标文件的评审和结果公示。这部分可能需要实现复杂的业务逻辑,例如根据评分规则计算每个投标...

    MS12-020利用工具 含bug修正版.rar

    在压缩包文件中,"Apache 1.2.19 mod_jk 远程栈溢出漏洞.py"可能是一个针对Apache Tomcat服务器的mod_jk模块的漏洞利用脚本,虽然它与MS12-020不是直接相关,但显示了同一时期网络环境中其他可能的攻击面。...

    exploit-code-by-me:利用我复制的开发代码

    Java漏洞利用代码可能涵盖各种类型,如代码注入、内存溢出、不安全的类加载等。这些exploits通常需要深入理解Java虚拟机(JVM)的工作原理,以及如何利用特定的类库或框架的弱点。 "exploit-code-by-me-master"这个...

Global site tag (gtag.js) - Google Analytics