`

Tomcat 设置堆大小

阅读更多

修改连接数
< port="80" protocol="HTTP/1.1"  
<Connector port="80" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="75" maxSpareThreads="300" enableLookups="false" redirectPort="8443" acceptCount="200" connectionTimeout="50000" disableUploadTimeout="true"/>
主要修改了maxThreads、acceptCount。

引用
Google资料说“如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。”



1、首先是:java.lang.OutOfMemoryError: Java heap space

内存1G
set JAVA_OPTS=%JAVA_OPTS% -server -Xms256m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true -Dcom.sun.management.jmxremote

rem Guess CATALINA_HOME if not defined   在rem前面增加设置

一般通过 java -Xmx1024M -version  可以查看jvm 最大内存:一般是1.5G左右,我输入java -Xmx1624M -version,提示Error occurred during initialization of VMHeap 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 jdk堆大小配置及eclipse中设置

    NULL 博文链接:https://913.iteye.com/blog/1625468

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

    -Xms:初始堆大小 -Xmx:最大堆大小 但堆的大小受下面三方面影响: 1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6...

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

    Windows下调整Tomcat启动... 比如,我想设置初始内存大小为128M,最多占用1G,就是下面的设置: -Xms128m -Xmx1024m  在Linux/Unix下,可以通过在 {tomcat_dir}/bin/catalina.sh 中增加或修改 JAVA_OPTS 来达到:

    java8看不到源码-ansible-tomcat7:安装ApacheTomcat的Ansible角色

    的最大堆内存大小 tomcat_extra_opts - 在启动期间提供给 Tomcat JVM 的额外命令行参数 依赖关系 此角色需要java8角色,可以通过运行以下命令安装: $ ansible-galaxy install -r requirements.yml 示例手册 包括...

    trim:泽西岛和Tomcat

    修剪 泽西岛和Tomcat:轻松实现RESTful服务 Trim是一个非常简单的Jersey应用程序,可读取文本并计算术语相关性。...适当地编辑您的最大JVM堆大小(有关上限,请上的EC2实例详细信息-使用您拥有的所有内存)。

    tomcat性能优化(性能总览)

    1.增加JVM堆内存大小 1)JVM通常不去调用垃圾回收器,所以服务器可以更多关注处理web请求,并要求尽快完成。 2)更改文件(catalina.sh) JAVA_OPTS=”-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -...

    分别在Linux和Windows下设置JVM内存的简单方法

    在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh 添加:JAVA_OPTS=’-Xms512m -Xmx1024m’ 或者 JAVA_OPTS=”-server -Xms800m -Xmx800m  -XX:MaxNewSize=256m” 或者 CATALINA_OPTS=”-server -Xms256m...

    docker-bigdata:docker 上的 blazegraph(以前的 bigdata)

    来自 tomcat 源的简单 ... 最大 java 堆大小的准则不超过可用 RAM 的 1/2。 建议使用 2G 到 8G 的堆大小以避免长时间的 GC 暂停。 G1 收集器(在 Java 7 中)可以使用更大的堆。 导出 JAVA_OPTS="-server -Xmx2g

    myeclipse的优化

    Window &gt; Preferences &gt; General &gt; Startup andy Shutdown 在这里列出的是MyEclipse启动时加载的模块 我这里只让它加载tomcat5 勾选 MyEclipse EASIE Tomcat 5 。 怎样才能知道哪些启动项有用呢?我现在把我知道的...

    java面试题

    63.3. Sun HotSpot 1.4.1 JVM堆大小的调整 44 63.4. BEA JRockit JVM的使用 45 63.4.1. Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:...

    javapms门户网站源码

    管理员角色是对管理员权限的设置,管理员管理权限的大小直接和角色挂钩。点击“会员管理”左侧功能菜单里的“管理员角色”,右侧会列出管理员角色信息列表,包含角色名称、排列顺序,可按角色名称、部门名称来搜索...

    java 面试题 总结

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    超级有影响力霸气的Java面试题大全文档

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    如果让你设计一个动态大小的线程池,如何设计,应该有哪些方法? 87 【多线程】CyclicBarrier 和 CountDownLatch的不同 88 CountDownLatch 88 CyclicBarrier 89 区别: 89 【多线程】简述synchronized 和java.util....

Global site tag (gtag.js) - Google Analytics