设为首页 收藏本站
查看: 974|回复: 0

[经验分享] tomcat6优化配置(参考网络资源整理)

[复制链接]

尚未签到

发表于 2018-12-7 08:17:30 | 显示全部楼层 |阅读模式
  Tomcat的优化分成两块:

  Tomcat启动命令行中的优化参数即JVM优化
  Tomcat容器自身参数的优化(这块很像ApacheHttp Server)
  

  一、JVM的优化
  1.Tomcat首先跑在JVM之上的,因为它的启动其实也只是一个java命令行,首先我们需要对这个JAVA的启动命令行进行调优。
  PS:这边讨论的JVM优化是基于Oracle Sun的jdk1.6版本以上,其它JDK或者低版本JDK不适用。
  2.Tomcat启动行参数的优化
  Tomcat 的启动参数位于tomcat的安装目录\bin目录下,修改catalina.sh文件,注释的最后一行后面增加下面参数:
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -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"  

  参数解释:
  -server
  我不管你什么理由,只要你的tomcat是运行在生产环境中的,这个参数必须给我加上,因为tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以 server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。。。更。。。还有更。。。
  -Xms–Xmx
  即JVM内存设置了,把Xms与Xmx两个值设成一样是最优的做法.
  PS:一个系统随着并发数越来越高,它的内存使用情况逐步上升,上升到最高点不能上升了,开始回落,你们不要认为这个回落就是好事情,由其是大起大落,在内存回落时它付出的代价是CPU高速开始运转进行垃圾回收,此时严重的甚至会造成你的系统出现“卡壳”就是你在好好的操作,突然网页像死在那边一样几秒甚至十几秒 时间,因为JVM正在进行垃圾回收。
  因此一开始我们就把这两个设成一样,使得Tomcat在启动时就为最大化参数充分利用系统的效率,这个道理和jdbcconnection pool里的minpool size与maxpool size的需要设成一个数量是一样的原理。如何知道我的JVM能够使用最大值啊?在设这个最大内存即Xmx值时请先打开一个命令行,键入如下的命令:
  java -Xmx2048m -version #检查是否支持你所设的值
  –Xmn
  设置年轻代大小为512m。整个堆大小=年轻代大小+年老代大小+持久代大小.持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
  -Xss
  是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M,要不然容易出现out of memory。
  -XX:+AggressiveOpts
  作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)
  -XX:+UseBiasedLocking
  启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。
  -XX:PermSize=128M-XX:MaxPermSize=256M
  JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
  在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。
  由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
  那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;四分之一是1024MB,这就是MaxPermSize默认大小。
  -XX:+DisableExplicitGC
  在程序代码中不允许有显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操作结束时手动调用System.gc()一下,觉得这样 做好像能够解决它们的out of memory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,性能不到什么地方去哟!
  -XX:+UseParNewGC
  对年轻代采用多线程并行回收,这样收得快。
  -XX:+UseConcMarkSweepGC
  即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
  我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。
  -XX:MaxTenuringThreshold
  设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一 个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
  这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。
  -XX:+CMSParallelRemarkEnabled
  在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
  -XX:+UseCMSCompactAtFullCollection
  在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。
  -XX:LargePageSizeInBytes
  指定 Java heap的分页页面大小
  -XX:+UseFastAccessorMethods
  get,set 方法转成本地代码
  -XX:+UseCMSInitiatingOccupancyOnly
  指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集
  -XX:CMSInitiatingOccupancyFraction=70
  CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就 不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是548810%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的promotion failed;
  因此这个参数的设置必须与Xmn关联在一起。
  -Djava.awt.headless=true
  这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。
  上述这样的配置,基本上可以达到:
  系统响应时间增快
  JVM回收速度增快同时又不影响系统的响应率
  JVM内存最大化利用
  线程阻塞情况最小化
  

  二、tomcat本身的优化
  1.Tomcat容器内的优化
  前面我们对Tomcat启动时的命令进行了优化,增加了系统的JVM可使用数、垃圾回收效率与线程阻塞情况、增加了系统响应效率等还有一个很重要的指标,我们没有去做优化,就是吞吐量。
  打开tomcat安装目录\conf\server.xml文件,定位到这一行:
   protocol="org.apache.coyote.http11.Http11NioProtocol"  Tomcat apr运行模式的配置是三种运行模式之中相对比较麻烦的一种。据官方文档所述,Tomcat apr需要以下三个组件的支持:
  APR library[APR库]
  JNI wrappers for APR used by Tomcat (libtcnative)
  OpenSSL libraries[OpenSSL库]
  此外,与配置nio运行模式一样,也需要将对应的Connector节点的protocol属性值改为org.apache.coyote.http11.Http11AprProtocol。
  下载tomcat-native-1.1.33-src.tar.gz
tar xzf tomcat-native-1.1.33-src.tar.gz
cd tomcat-native-1.1.33-src/jni/native
./configure
make
make install  

  编辑/etc/profile,末尾增加
export LD_LIBRARY_PATH=/usr/local/apr/lib  

  重启运行tomcat就可以了
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-644155-1-1.html 上篇帖子: 配置osgi开发环境:基于springsource tool suite和virgo tomcat 下篇帖子: JAVA环境变量和TOMCAT服务器配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表