`

为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
分享到:
评论

相关推荐

    tomcat内存配置

    tomcat内存配置

    增加tomcat内存

    tomcat默认的使用内存大小为64M,在某些应用中可能不够,所以需要自己手动更改内存,配置tomcat文件增加内存

    扩大Tomcat内存

    方法一:这种方法是在Tomcat使用startup.bat文件启动项目的情况下,在Tomcat文件下找到“/bin/catalina.bat”,在catalina.bat的第一行增加: set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize...

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

    Tomcat内存溢出三种情况及解决办法,不同的异常采用不同的方式解决,不能盲目的增加内存就可以了。

    Tomcat虚拟内存

    JAVA虚拟内存设置,包括非安装版和安装版

    Tomcat加载到虚拟内存、端口设置、内存加大

    文档是自己在使用过程中总结的,有什么不足之处,还请谅解。

    Tomcat配置使用文档

    启动内存参数的配置及含义 Tomcat的简单配置介绍 增加虚拟目录及相关文件说明 Tomcat多虚拟主机的配置方法 Tomcat集群配置(负载均衡、Session共享) Tomcat安全SSL的配置使用 Tomcat性能调优 Tomcat日志简介 安全配置...

    Tomcat-启动参数设置

    windows及linux环境下,tomcat启动参数的设置。在Tomcat上运行j2ee项目代码时,经常会出现内存溢出的情况,解决办法是在系统参数中增加系统参数...

    nginx+tomcat在windows下做负载均衡

    由于Tomcat自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动Tomcat以释放占用的内存,这样做便会阻断网站运行。 所以对Tomcat做负载均衡便很...

    Tomcat和IIS的配合

    Windows平台下最常用的Web服务器无疑是IIS(包括PWS),对于IIS,Tomcat也提供了配合 工作的方法,使用这种方法,可以为本来不具有Java Servlet和JSP功能的IIS增加处理JSP和Java

    tomcat 热部署 hot deploy Jrebel 加大JVM内存

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1965515

    Nginx+Tomcat在Windows下做负载均衡

    Tomcat 服务器作为一个 ...由于 Tomcat 自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动 Tomcat 以释放占用的内存,这样做便会阻断网站运行。

    Linux与Windows下tomcat内存设置

     以下是自己设置的另外增加一个setenv.sh文件来设置tomcat内存,给文件加上执行权限  #vi /opt/app/tomcat6/bin/setenv.shexport JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:PermSize=128m ...

    tomcat6、7、8、9, maven3.5

    Tomcat的6的用户应该知道,Tomcat的团队已经公布了 的生命日期为Tomcat 6.x的结束。Tomcat 6.x的用户应该计划在Tomcat 6.x到达生命周期之前进行升级。 Apache Tomcat 5.x 的Apache Tomcat 5.x的是可以从档案下载。...

    tomcat-7.0.52 x64免安装版

    启动内存参数的配置 tomcat/bin/catalina.bat 如果是linux 就是 catalina.sh 在rem 的后面增加如下参数 set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m 修改Tomcat的JDK目录 打开tomcat/bin/catalina....

    Tomcat+Mysql高并发配置优化讲解

    将java变成server模式,增大jvm的内存,在文件开始位置增加 setJAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss512K -XX:PermSize=128m-XX:MaxPermSize=256m setCATALINA_OPTS=-server -Xms512m -Xmx512m 如下图: ...

    物流管理系统 java+sqlserver+tomcat毕业设计

    针对物流的特点和要求,软件需要对物流过程的全程做了业务整合,软件对物流全程进行过程控制,并增加了报表系统,建立了客户信用档案。在报表数据库的连接方面,建立了临时的数据库,使报表数据主要在数据库中存放,...

    详解Windows下调整Tomcat启动参数的实现方法

    Tomcat默认可以使用的内存为128MB,对于访问数比较多、比较吃内存的应用来说,这是不够的。我们可以通过调整Java虚拟机的启动参数来增加Tomcat可使用的内存。  下面就是众所周知的两个参数 -Xms<size> JVM初始化...

    Tomcat源码研究

     打开tomcat/bin/catalina.bat 在最后一个rem后面增加 set JAVA_HOME=C:\Program Files\Java\jdk1.6.0 3 增加虚拟目录  /tomcat/conf/server.xml 第一行是以前默认存在的,第二行是新增的 ...

    Tomcat详细配置

    Tomcat7已经发布多时,Tomcat7增加了对Servlet 3.0,JSP 2.2和JSP-EL 2。2的支持、支持web application内存泄露的检测和防护等很多新功能。本片教程主要介绍如何配置Tomcat7。

Global site tag (gtag.js) - Google Analytics