Tomcat性能优化

1、JVM微调

通过jstat -gccapacity查看Tomcat内存:

tomcat@server$ jstat -gccapacity `ps -ef|grep Bootstrap|grep -v grep|gawk '{print $2}'`  
NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       PGCMN    PGCMX     PGC       PC     YGC    FGC   
2624.0  28672.0   4800.0  448.0  448.0   3904.0     5312.0    57344.0     9496.0     9496.0   21248.0  86016.0  21248.0  21248.0     19     2

在Tomcat的catalina.sh 配置CATALINA_OPTS:

CATALINA_OPTS="-XmsNNNN -XmxNNNN -XX:NewSize=NNN -XX:MaxNewSize=NNN -XX:SurvivorRatio=N -XX:PermSize=NNN -XX:MaxPermSize=NNN "
-Xms 堆内存最小值
-Xmx 堆内存最大值
-XX:NewSize 年轻带最小值
-XX:MaxNewSize 年轻带最大值
-XX:SurvivorRatio Eden区:Survivor区
-XX:PermSize 非堆区最小值

-XX:MaxPermSize 非堆区最大值

可以配合JVM配置GC日志参数使用

2、logging日志

$CATALINA_BASE/conf/logging.properties

简言之,Tomcat原始配置的logging模块堆每天记录的日期有上限,需要重新配置

————实际没有碰到过与之相关的性能问题,略

3、Connectors配置*

$CATALINA_BASE/conf/server.xml

Tomcat提供两个连接器:

       一个是AJP连接器,缺省监听TCP/8009端口

       另外一个是HTTP连接器,缺省端口是8080端口

统计两个端口的连接数:

user@server$ netstat -ant|grep 8009|grep ESTABLISHED|grep -v grep|wc -l
156

user@server$ user@server$ netstat -ant|grep 8080|grep ESTABLISHED|grep -v grep|wc -l 
0

一些重要配置:

maxThreads : 最大线程数,缺省是200,这是配置你的应用并发有最大多少连接,越大会耗费内存和CPU,因为CPU疲于线程上下文切换,没有精力提供请求服务了,在200到800之间,推荐400。明智的办法是将图片CSS等静态文件移植到Tomcat以外,使用Apache和Nginx服务,如果静态文件很多很大,配置Tomcat的context.xml,缺省是服务静态文件大小是10M,可以改为60M,刷新时间延迟到60s。

maxConnections: 最大连接数,这个数值取决于你使用堵塞还是非堵塞连接器,堵塞的是BIO, 那么这个数值是BIO的最大线程数,如果是NIO,Java非堵塞I/O连接器,那么这个数值是1000,如果使用C原生非堵塞连接器APR,那么这个数值是8192。那么如何知道我们系统使用哪个连接器类型呢?缺省是在APR和BIO之间切换,如果在启动运行时,你配置编译了APR,APR库包被Tomcat发现,那么就采取APR连接类型,否则就是要BIO。APR虽然好,但是稳定性不是很强,其SSL使用OpenSSL,而使用NIO,可以支持Java自身的SSL。

那么如何知道APR被tomcat发现?在日志$CATALINA_BASE/logs/catalina.out可以找到APR found等输出。
请注意,如果前端使用Apache/Nginx,要保证前端的最大客户端MaxClient等设置大于Tomcat的maxConnection。

connectionTimeout* :缺省是60000毫秒,也就是60秒,这个值是考虑拨号上网情况,太大了,生产环境一般宽带可设置为2000ms=2秒。

acceptCount :这是Tomcat的线程如果都忙于响应,再来新的连接只好进入队列排队,缺省是100,也就是可以有100个请求排队,如果超过100个就拒绝连接,用户浏览器会得到无响应等问题,建议将这个值设置大。

maxKeepAliveRequests*: 每个TCP连接接受最大的Http请求数目,当处理一个keep alive请求达到这个最大值,Tomcat关闭这个连接,设置1为失效任何keep alive请求,对于BIO高并发,四层负载平衡和NoSSL情况需要失效;对于SSL APR/NIO 7层负载平衡需要激活,设置为-1是不限制,缺省为100。


现在我们详细描述一下Tomcat连接器在不同模式下工作原理:
  前端Apache/Nginx等客户端向Tomcat连接器提交请求,一个堵塞的连接器BIO,这是最稳定最老的一个连接器,堵塞意味着每个连接线程绑定到每个Http请求,直到获得Http响应返回,如果Http客户端请求的是keep-Alive连接,那么这些连接也许一直保持着直至达到timeout时间,这期间不能用于其它请求。
  另外一个连接器是APR,这是使用原生C语言编写的非堵塞I/O,但是需要编译,但是稳定性不高,另外一个NIO是比原生APR稳定,纯Java解决方案,下面是对照表:



参考:

http://www.jdon.com/idea/tomcat-tuning-in-practice.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值