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

Tomcat启动的初始内存设置(Tomcat 的JVM 内存溢出)

阅读更多

设置Tomcat启动的初始内存


其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置
实例1G内存环境下java jvm 的参数设置参考:

 

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: 
NewSize=192m -XX:MaxNewSize=384m"
CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m 
-XX:NewSize=192m -XX:MaxNewSize=384m"

 
Linux:
在/usr/local/apache-tomcat-xxx/bin 目录下的catalina.sh
添加:

JAVA_OPTS='-Xms512m -Xmx1024m'

 

要加“m”说明是MB,否则就是KB了,在启动tomcat时会 报内存不足。

-Xms:初始值
-Xmx:最大值
-Xmn:最小值


Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就没用了。
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法一:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcatx\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat xxx"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat xxx\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m
重起tomcat服务,设置生效

解决办法二:

解压版的Tomat在注册表中可能没有上面的参数。可运行D:\Tomcat 6.0\bin\tomcat6w.exe设置。

打开后在java页签,找到Java Options栏,在最下面填写参数即可。如:

-XX:PermSize=64M
-XX:MaxPermSize=128m

初始内存值可在本页签的最下方Initial memory pool和Maximum memory pool直接填写。


Tomcat 的JVM 内存溢出分类

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"”上面加入以下行:

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_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的第一行增加:

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_OPTS=
-Xms64m 
-Xmx256m 
-XX:PermSize=128M 
-XX:MaxNewSize=256m 
-XX:MaxPermSize=256m

 

参考:http://blog.163.com/zhao_jinggui/blog/static/169620429201232001823737/

分享到:
评论

相关推荐

    设置Tomcat的初始启动内存

    Tomcat初始启动内存设置 在Java应用程序中,初始内存和最大内存的设置对程序的性能有着重要的影响。特别是在Tomcat服务器中,初始内存的设置可以影响服务器的性能和稳定性。然而,在Tomcat中设置初始内存并不是一件...

    eclipse tomcat启动,内存溢出问题

    ### Eclipse Tomcat 启动时出现内存溢出问题解析及解决方法 #### 一、问题背景与概述 在使用Eclipse集成开发环境部署并运行基于Tomcat的应用程序时,经常会出现“java.lang.OutOfMemoryError: Java heap space”这...

    ECLIPSE,TOMCAT,JVM内存设置

    标题 "ECLIPSE,TOMCAT,JVM内存设置" 涉及到的是在开发Java Web应用程序时,如何配置Eclipse集成开发环境(IDE)、Apache Tomcat服务器以及Java虚拟机(JVM)的内存参数,以优化性能和避免内存溢出等问题。...

    Eclipse + Tomcat 内存溢出参数设置

    ### Eclipse + Tomcat 内存溢出参数设置详解 在Java开发过程中,特别是在使用Eclipse作为集成开发环境(IDE)并结合Apache Tomcat服务器进行Web应用开发时,经常会遇到内存溢出的问题。这类问题通常表现为应用程序...

    设置tomcat启动内存大小

    - **调整堆内存**:根据应用的实际负载和业务需求,合理设置初始堆内存(-Xms)和最大堆内存(-Xmx),避免频繁的垃圾回收和内存溢出问题。 - **考虑多代内存**:对于大型应用,可能需要更细致地调整新生代(-XX:...

    myeclipse-tomcat jdk内存溢出

    根据提供的描述“myeclipse-tomcat jdk内存溢出,针对myeclipse做的相应的配置”,我们可以了解到该问题是由于MyEclipse中Tomcat服务器所使用的JDK设置不当导致的JVM内存不足。接下来,我们将详细探讨这一问题的具体...

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

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

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    1. **环境变量设置**:通过设置`CATALINA_OPTS`环境变量,可以在系统级别全局地调整Tomcat中JVM的内存参数。 2. **编辑catalina.bat**:在Tomcat的bin目录下,直接修改catalina.bat文件,替换或添加`-Xmx`, `-Xms`,...

    解决tomcat内存溢出的配置方法

    1. **调整JVM参数**:在Tomcat的启动脚本(如`catalina.sh`或`catalina.bat`)中,可以通过设置JVM的启动参数来控制内存大小。常用的是-Xms和-Xmx参数,分别代表初始堆内存和最大堆内存。例如,可以设置为`-Xms256m ...

    Tomcat内存溢出的三种情况及解决办法分析

    JVM在启动时会自动设置堆大小的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn、-Xms、-Xmx等选项来进行设置。堆大小的设置受三方面的限制:操作系统的数据...

    如何配置Tomcat的JVM虚拟机内存大小

    - `-Xms`:JVM初始化堆的大小,即虚拟机启动时向系统申请的初始内存大小。 - `-Xmx`:JVM堆的最大值,定义了虚拟机可以使用的最大内存空间。 合理设置这两个参数对于避免内存溢出和提高应用性能极为重要。通常,...

    如何设置Tomcat的JVM虚拟机内存大小

    设置Tomcat的JVM虚拟机内存大小是为了确保服务器能够高效地运行并避免因内存溢出而导致的性能问题或服务中断。 内存溢出是由于程序在运行过程中需要的内存超过了JVM所能提供的最大内存。这可能是由于以下几个原因:...

    java excel导出tomcat内存溢出处理方法

    - `-Xms1024m`:设置启动时的初始堆内存大小为1GB。 - `-Xmx1024m`:设置最大堆内存大小为1GB。 - `-XX:PermSize=128m`:设置PermGen的初始大小为128MB。 - `-XX:MaxPermSize=256m`:设置PermGen的最大大小为256...

    Tomcat-启动参数设置

    ### Tomcat 启动参数设置详解 #### 一、背景介绍 在部署Java Web应用程序时,经常使用Apache Tomcat作为应用服务器。然而,在高并发或大数据量处理的应用场景下,Tomcat可能会出现内存溢出等问题。为了提升Tomcat的...

    Tomcat设置服务启动参数

    - `Initialmemorypool`:推荐设置为320MB,这表示JVM启动时分配给程序的初始内存大小。如果设置得过小,可能会导致程序启动时的响应时间增加。 - `Maximummemorypool`:推荐设置为1024MB(即1GB),这是JVM可以...

    Tomcat JVM的参数调优

    初始内存(`-Xms`)是JVM启动时分配的最小内存,而最大内存(`-Xmx`)则是JVM允许的最大内存使用量。合理设置这两个值有助于避免因内存不足导致的性能下降或系统崩溃。 垃圾回收机制是JVM自动清理不再使用的对象以...

Global site tag (gtag.js) - Google Analytics