`
zhaoshijie
  • 浏览: 2261881 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm内存溢出解决方案

 
阅读更多

常见的内存溢出有以下两种:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space



---------------------------------------------------------

这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。


一、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)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。



二、java.lang.OutOfMemoryError: Java heap space
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

----------------------------------------------------------



Linux下修改JVM内存大小:

要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.

# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false



windows下修改JVM内存大小:

情况一:解压版本的Tomcat, 要通过startup.bat启动tomcat才能加载配置

要添加在tomcat 的bin 下catalina.bat 里

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%后面添加,红色的为新添加的.

set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true



情况二:安装版的Tomcat下没有catalina.bat

windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs

加入 -Xms300m -Xmx350m 
重起tomcat服务,设置生效


---------------------------------------------------------

各参数的比例:

Xmx 与PermSize的和不可超过JVM可获得的总内存

PermSize不可大于Xmx



请参见其它的参数详解的文章,各参数值大小的本文不讨论.


另外:myeclipse 内存溢出解决方案:

在myeclipse配置tomcat的JDK 下面复制:
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=400m

分享到:
评论

相关推荐

    搜索引擎创建索引时JVM 运行时内存溢出解决方案

    本文将深入探讨这个问题,并提供有效的解决方案。 内存溢出,也称为“Out of Memory”错误,通常是由于程序请求的内存超过了系统或JVM分配的可用内存。在搜索引擎创建索引时,这可能是由于以下原因造成的: 1. **...

    关于JVM内存溢出的原因分析及解决方案探讨.docx

    本文主要讨论了 JVM 中的内存溢出问题,包括内存溢出的定义、内存泄漏和内存溢出的区别与联系、JVM 垃圾回收机制、内存溢出的原因分析、常见的四种内存溢出情况以及解决方案。 一、内存溢出的定义 内存溢出是指...

    关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论

    标题中的“关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论”涉及了两个关键的IT概念:Tomcat服务器的字符编码问题和Java虚拟机(JVM)内存管理的问题。让我们逐一深入探讨这两个主题。 首先,我们来...

    jprofiler的使用及联调内存溢出解决方案交流

    jprofiler的使用及联调内存溢出解决方案交流 jprofiler 是一个全功能的 Java 剖析工具,专用于分析 J2SE 和 J2EE 应用程序。它把 CPU、执行绪和内存的剖析组合在一个强大的应用中,提供许多 IDE 整合和应用服务器...

    java内存溢出解决方案

    本文将深入探讨Java内存溢出的不同类型及其解决方案。 1. **内存溢出类型** - **1.1. java.lang.OutOfMemoryError: PermGen space** PermGen空间是JVM用于存储类元数据和常量池的部分,不会被垃圾收集器自动...

    myeclipse内存溢出问题解决方案

    首先,解决内存溢出问题的关键在于调整JVM的内存配置。在MyEclipse中,可以通过以下路径进行设置:Window > Preferences > MyEclipse > Servers > Tomcat > Tomcat 6.x > JDK Optional > Java VM arguments。在这里...

    Java内存溢出解决办法

    解决方案是优化代码,减少递归或调整栈的大小(通过-Xss设置)。 3. **方法区/永久代溢出**: 方法区用于存储类信息、常量、静态变量等。JDK8之前,这部分内存被称为永久代,容易因类信息过多而溢出。JDK9之后,这...

    tomcat修改JVM内存配置(解决大项目内存溢出问题有效方案)

    tomcat修改JVM内存配置(解决大项目内存溢出问题有效方案)

    Python内存泄漏和内存溢出的解决方案

    Python内存管理是一个重要的主题,尤其是对于那些运行长时间后台服务的开发者而言。虽然Python有内置的垃圾回收机制,但...通过这些方法,可以有效地防止和解决Python内存泄漏和内存溢出问题,确保后台服务的稳定运行。

    如何避免JDBC引起的内存溢出情况

    #### 二、针对不同数据库的解决方案 **1. MySQL** 对于MySQL,可以通过修改JDBC连接字符串中的参数来控制结果集的读取方式。具体来说,可以在连接字符串中添加`useCursorFetch=true`和`defaultFetchSize=100`两个...

    java解决大批量数据导出Excel产生内存溢出的方案

    在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...

    内存溢出解决

    ### 内存溢出解决 #### 背景与概念 在Java开发中,内存管理是确保应用程序稳定运行的关键因素之一。当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM...

    java常见的几种内存溢出和解决方案.docx

    Java 中的内存溢出和解决方案 Java 中的内存溢出是一种常见的错误,可能会导致程序崩溃或hang死。了解 Java 中的内存溢出原因和解决方案是非常重要的。本文将介绍 Java 中的几种常见的内存溢出和解决方案。 1.JVM...

    Java内存溢出的详细解决方案

    Java内存溢出的详细解决方案 Java内存溢出是指Java虚拟机(JVM)中的内存使用超过了最大限制,导致程序崩溃或无法正常运行的错误。Java内存溢出主要有两种类型:PermGen space和Java heap space。 PermGen space ...

    Eclipse运行工程内存溢出解决方法

    内存溢出(Out of Memory,OOM)是...总之,解决Eclipse运行工程时的内存溢出问题需要理解内存管理机制,合理设置JVM内存参数,并结合代码优化。通过这些方法,可以提高Eclipse的运行效率,保证大型工程的稳定运行。

    Java 内存溢出解决办法

    不同的应用和环境可能需要不同的解决方案,因此需要根据具体情况灵活处理。在调整内存设置时,应逐步增大内存,观察程序运行情况,避免一次性设置过大导致其他问题。同时,保持对JVM和应用性能的持续监控是预防和...

    eclipse内存溢出的解决办法.txt

    通过对Eclipse内存溢出问题的深入分析和解决方案的探讨,我们可以看到,通过合理地调整Eclipse的启动参数、优化项目设置、清理缓存以及禁用不必要的插件等方式,可以有效地解决Eclipse内存溢出的问题。当然,在实际...

    JVM实战-对象访问与内存溢出异常解析

    在实践中遇到的主要挑战是如何准确地控制和触发这些异常,以及如何有效分析异常原因并提出解决方案。 在后续的学习中,我们将继续探索更深层次的JVM内部工作原理,并学习更多高级的内存管理和优化技巧。此外,还会...

Global site tag (gtag.js) - Google Analytics