tomcat出现内存溢出以及性能调优

JAVA_OPTS=" -server -Xms2400M -Xmx2400M -Xmn1000M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:MaxTenuringThreshold=8 -Djava.awt.headless=true"


http://zhumeng8337797.blog.163.com/blog/static/100768914201292532935673/

最近新建了一个tomcat项目,可是运行不了多长时间服务就停掉了,只有重启才可以回复。于是就查看了一下tomcat的log,里面这句最多
java.lang.NullPointerException
Of memory

空指针异常和内存溢出,于是就集中问题解决tomcat的优化,因为之前的项目和这个项目的配置都是一样的,然后我查看了一下和这个相似的一个大项目,在这里我查看到那个项目的catalina.sh这个tomcat的启动文件发现多了一行代码
JAVA_OPTS=" -server -Xms2400M -Xmx2400M -Xmn1000M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:MaxTenuringThreshold=8 -Djava.awt.headless=true"

然后我就把这段代码加到新项目里面,然后观察了一天没出现过服务停掉和异常!
具体原因就是项目比较大,所以比较耗费资源,需要加大Jvm内存来达到优化!

以上参数具体说明


-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:java heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间
提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。


在这里我提出几点tomcat的调优方法

1.精简Tomcat和配置文件

# 删除不需要的管理应用和帮助应用,提高tomcat安全性。
# 删除webapps下所有文件 # rm –fr $CATALINA_HOME/webapps/*
# 删除server/webapps下所有文件 # rm –fr $CATALINA_HOME/server/webapps/*

2.精简sever.xml配置文件 使用tomcat发布版本中的最小配置文件,提高性能,如果有功能上的需求,在逐个的加入功能配置。

# 备份原来的server.xml为server.xml_bak
# mv server.xml server.xml_bak
# 复制server-minimal.xml为server.xml # cp server-minimal.xml server.xml

3.连接器优化

# 在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化。
# maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。 可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。
# acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
# minSpareThreads Tomcat初始化时创建的线程数。默认值4。
# maxSpareThreads 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。
# enableLookups 是否反查域名,默认值为true。为了提高处理能力,应设置为
# false connnectionTimeout 网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
# maxKeepAliveRequests 保持请求数量,默认值100。
# bufferSize 输入流缓冲大小,默认值2048 bytes。
# compression 压缩传输,取值on/off/force,默认值off。 其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
# web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

4.优化JDK Tomcat默认可以使用的内存为128MB
Windows下,在文件{tomcat_home}/bin/catalina.bat
Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面

# 即前文所提调优JVM


你可能感兴趣的:(tomcat)