`

为tomcat 增加内存

 
阅读更多

将以下代码放在catalina.bat/catlina.sh 最上面即可,示例为64位8G内存配置参考

tomcat 7.0.65
--windows 
setlocal
set JAVA_OPTS=-server -Xms2g -Xmx2g -XX:PermSize=256m -XX:MaxPermSize=512m
--linux
# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms2g -Xmx2g -XX:PermSize=256m -XX:MaxPermSize=512m"
注意:windows和linux 不一样

 

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。

一、Java JVM内存介绍

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

(1). 堆内存分配 
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行堆内存设置,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值,建议堆的最大值设置为可用内存的最大值的80%。

初始化堆的大小是JVM在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果JVM启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,JVM就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时JVM就会提示内存溢出,并且导致应用服务崩溃。所以,如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。

(2). 非堆内存分配 
也叫永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域。它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理。JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 GC不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

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

二、三种内存溢出异常介绍

1. OutOfMemoryError: Java heap space  堆溢出

内存溢出主要存在问题就是出现在这个情况中。当在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。

 2. OutOfMemoryError: PermGen space   非堆溢出(永久保存区域溢出)

这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。

3. OutOfMemoryError: unable to create new native thread.   无法创建新的线程

这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。

 

三、Java JVM内存配置

1. JVM内存分配设置的参数有四个

-Xmx    Java Heap最大值,默认值为物理内存的1/4;

-Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

-Xmn    Java Heap Young区大小,不熟悉最好保留默认值;

-Xss      每个线程的Stack大小,不熟悉最好保留默认值;

-XX:PermSize:设定内存的永久保存区域; 

-XX:MaxPermSize:设定最大内存的永久保存区域;

-XX:PermSize:设定内存的永久保存区域;

-XX:NewSize:设置JVM堆的‘新生代’的默认大小;

-XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;

 

#-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落

 

设置完毕后可以通过jdk自带工具jvisualvm检测是否配置成功



 

  • 大小: 271.1 KB
分享到:
评论

相关推荐

    eclipse和tomcat的内存配置

    此时,启动Tomcat后预计占用的总内存为:1.36GB + 128MB + 256MB ≈ 1.766GB。 **2. 启动Tomcat后的内存检查** 启动Tomcat后,同样可以通过任务管理器等工具检查内存使用情况。在案例中,实际内存占用接近预计值1....

    tomcat内存配置

    在高负载或数据量较大的应用中,适当增加最大堆内存可以显著提高应用的性能。 #### `-server` 这个标志告诉JVM以“server”模式运行。与client模式相比,server模式更适合多核CPU,可以提供更好的性能优化。通常...

    tomcat服务内存扩大.docx

    当处理大量请求或运行资源密集型应用时,可能需要增加分配给Tomcat的服务内存。 描述中提到的“winserver tomcat注册成服务修改内存大小,解决tomcat内存溢出”,意味着在Windows Server操作系统上,Tomcat被配置为...

    Tomcat虚拟内存

    7. **内存泄露**:Tomcat运行过程中如果内存持续增加,可能是由于内存泄漏导致的。应检查应用代码和第三方库,确保所有资源在使用后都能正确释放。 8. **Java 8及更高版本的变化**:在Java 8之后,永久代...

    增加tomcat内存

    适当增加内存可以减少垃圾回收次数,从而提高性能。 #### 如何修改内存配置 修改Tomcat内存配置的方法主要有两种: 1. **通过`catalina.bat`/`catalina.sh`文件进行配置** 对于Windows系统,可以在`%TOMCAT_...

    TOMCAT内存溢出之解决方法

    这将使得Tomcat的可利用内存增加到800M。 2. 执行程序: 首先,关掉Windows服务当中的Tomcat4服务。然后,找到Tomcat/BIN目录下startup.bat,双击打开它,你会发现Windows内存占用会增加近800M。最后,执行程序,...

    tomcat如何扩大内存

    #### 一、通过修改 Tomcat 配置文件增加内存 1. **找到 Tomcat 安装目录**: - 打开 Tomcat 的安装目录,通常会有一个 `bin` 文件夹,在该文件夹下会看到 `catalina.sh`(Unix/Linux)或 `catalina.bat`(Windows...

    myeclipse-tomcat jdk内存溢出

    - 对于永久代内存,也可以通过增加其初始值和最大值来避免溢出。 - 例如:将XX:PermSize和XX:MaxPermSize分别设置为512m和1024m。 4. **启用并行收集器**: - 使用并行垃圾收集器可以提高垃圾回收效率,减少停顿...

    Eclipse + Tomcat 内存溢出参数设置

    1. **修改Tomcat的启动脚本**:通过编辑`G:\apache-tomcat-6.0.37\bin\catalina.bat`文件,添加`set JAVA_OPTS=-Xms256m -Xmx512m`来指定Tomcat的初始堆内存为256MB,最大堆内存为512MB。 - **操作步骤**: 1. ...

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

    ### Java Excel导出Tomcat内存溢出处理方法 在Java应用开发过程中,特别是在进行大量数据处理如Excel导出等操作时,经常会遇到Tomcat服务器内存溢出的问题。内存溢出是指程序运行时申请的内存超过了系统能提供的...

    tomcat6-内存-用户-编码配置

    这里,我们设置了初始堆内存为256MB,最大堆内存为1GB,以及 PermGen 区域的大小为256MB。根据你的应用需求和系统资源,这些值可能需要适当调整。 接下来是"用户配置"。在Tomcat6中,用户管理和角色授权主要通过`...

    Tomcat JVM内存优化(Linux环境)

    ### Tomcat JVM内存优化(Linux环境) 在Linux环境下运行Tomcat服务器时,经常会遇到与Java虚拟机(JVM)相关的内存溢出问题。这些问题通常表现为`java.lang.OutOfMemoryError`异常,具体又分为两类:`PermGen ...

    扩大Tomcat内存

    - `-Xmx1024M`:设置JVM最大可用堆内存为1024MB。 - `-XX:PermSize=256M`:设置JVM的永久代(PermGen space)初始大小为256MB。 - `-XX:MaxPermSize=256M`:设置JVM的永久代最大可用空间为256MB。需要注意的是,对于...

    eclipse tomcat启动,内存溢出问题

    - 在文件中添加或修改JVM参数以增加分配给JVM的内存大小。例如,可以将`JAVA_OPTS`设置为: ```bash set JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true [-XX:MaxPermSize=128m] ``` 其中`-Xms`表示初始...

    tomcat内存优化

    默认情况下,Tomcat分配的内存相对较小,仅为128MB,这可能不足以应对大规模的用户访问和数据处理。因此,我们需要进行适当的调整以优化JVM的内存使用。 首先,我们可以通过修改Tomcat的启动脚本来调整JVM的内存...

    tomcat动内存参数的配置

    这将设置Tomcat的初始堆内存为1GB,最大堆内存为2GB。 ### 性能调优策略 - **监控内存使用情况**:定期检查Tomcat的内存使用情况,确保没有内存泄漏或不必要的资源占用。 - **根据应用需求调整**:依据实际应用的...

    tomcat 7 和 tomcat 8

    7. 性能优化:Tomcat 8在内存管理、线程池和垃圾收集等方面进行了优化,提升了服务器的性能。 8. 安全增强:提供了更多的安全特性,如更好的密码加密存储和更强的身份验证机制。 总结来说,Tomcat 7和Tomcat 8在...

Global site tag (gtag.js) - Google Analytics