Tomcat之启动优化

来源:互联网 发布:小学数学网络研修计划 编辑:程序博客网 时间:2024/06/05 03:35
1.概述

2.修改位置
     (1)大概在tomcat的bin目录下catalina.sh文件的97行

     (2)修改内容如下(一般添加在catalina.sh文件中97行左右)
     添加参数如下:
export JAVA_OPTS="-server -Xms1600M -Xmx1600M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
     注意:在编译的时候需要将Tomcat编译 ./shutdown.sh 编译好之后重新开启 ./startup.sh 然后在执行下面的步骤看是否生效。 

3.是否生效
     ps -ef | grep tomcat
     jmap –heap 进程号 (Tomcat进程号 )


4.参数逐项说明
(1)-server
     -server 启用jdk 的 server 版:
     只要你的tomcat是运行在生产环境中的,这个参数必须添加,因为tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以server模式运行时将拥有,更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。

(2)-Xms–Xmx
     -Xms java虚拟机初始化时的最小内存;其初始空间(即-Xms)是物理内存的1/64,
     -Xmx java虚拟机可使用的最大内存; 最大空间(-Xmx)是物理内存的1/4,
     -Xmn年轻代堆内存大小,默认为物理内存的1/64。
     可以利用JVM提供的-Xmn -Xms -Xmx等选项,要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
     把Xms与Xmx两个值设成一样是最优的做法
     一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小。因为默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
     说明:如何知道我的 JVM 能够使用最大值


(3)-Xss
     是指设定每个线程的堆栈大小。一般设置不超过1M,要不然容易出现out of memory。

(4)-XX:+AggressiveOpts
     自带魔法属性,从单词可以看出,积极的、生猛的,也即可以将最新版的JDK优化后的新特性自动注入

(5) -XX:+UseBiasedLocking
     启用一个优化了的线程锁,对于高并发访问很重要 ,太多的请求忙不过来它自动优化,对于各自长短不一的请求,出现的阻塞、排队现象,他自己优化。

(6)-XX:PermSize -XX:MaxPermSize
     -XX:PermSize设置非堆内存初始值,默认是物理内存的1/64,在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。
     -XX:MaxPermSize设置最大非堆内存的大小,默认是32M,建议达到物理内存的1/4。

(7)-XX:MaxNewSize
     新生代内存的最大内存值,默认是16M

(8)-XX:+DisableExplicitGC
     在程序代码中不允许有显示的调用”System.gc()”,避免内存的大起大落

(9)-XX:MaxTenuringThreshold:设置垃圾最大年龄。
     如果设置为零的话,则年轻代对象不经过Survivor区直接进入年老代。对于年老代比较多的应用,可以提高效率。
      如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率,这个值的设置是根据本地监控后得到的一个理想的值,不能一概而论原搬照抄。

(10)-XX:+UseConcMarkSweepGC
     即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒
     添加该参数表示启动并发标识-清理(Mark-Sweep)回收器(CMS) 

(11)-XX:+UseParNewGC
     对年轻代采用多线程并行回收,这样收得快

(12)-XX:+CMSParallelRemarkEnabled
     在使用UseParNewGC 的情况下, 尽量减少mark 的时间,降低标记停顿

(13)-XX:+UseCMSCompactAtFullCollection
     在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。

(14)-XX:LargePageSizeInBytes
     指定 Java heap的分页页面大小

(15)-XX:+UseFastAccessorMethods
     get,set 方法转成本地代码

(16)-XX:+UseCMSInitiatingOccupancyOnly
     指示只有在 old generation 在使用了初始化的比例后concurrent collector 启动收集

(17)-Djava.awt.headless=true
     这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,
     在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。
原创粉丝点击