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
    评论
Tomcat是一个开源的Java Servlet容器,用于处理Java Servlet和JSP(Java Server Pages)请求。为了提高Tomcat性能,我们可以采取以下一些优化措施: 1. 调整内存设置:Tomcat性能受到内存的影响较大,可以根据服务器的硬件和预期的负载来配置JVM(Java虚拟机)的内存参数,如-Xms(初始堆大小)和-Xmx(最大堆大小)。合理配置内存可以有效地避免内存溢出和频繁的垃圾回收。 2. 合理配置线程池:Tomcat使用线程池来处理并发请求,可以通过调整线程池的大小和配置参数来提高性能。可以根据服务器的硬件配置,预估的请求数量和处理时间来合理配置线程池的大小,避免线程过多或过少的情况发生。 3. 优化静态资源的处理:静态资源(如图片、CSS和JavaScript文件)可以通过使用CDN(内容分发网络)或将其存储在独立的服务器上来提高访问速度。同时,可以启用GZIP压缩和浏览器缓存,以减少传输的数据量和渲染时间。 4. 优化数据库访问:在应用程序中,数据库访问是一个非常常见且需要优化的环节。可以使用连接池来减少数据库连接的开销,同时尽量减少不必要的SQL查询和使用合适的索引。此外,将频繁查询的数据缓存到内存中,可以大大提高性能。 5. 调整Tomcat的配置参数:Tomcat性能也受到其自身的配置参数的影响,可以根据具体情况来调整一些重要的参数,如连接超时时间、最大请求数量、缓冲区大小等。 6. 监控和识别性能问题:在优化Tomcat性能的过程中,及时监控和识别性能问题非常重要。可以使用一些性能监控工具,如JVisualVM、JProfiler等来识别潜在的性能瓶颈和热点。 综上所述,通过调整内存设置、线程池配置、静态资源优化、数据库访问优化、调整Tomcat配置参数以及监控问题识别,我们可以有效地优化Tomcat性能,提升应用程序的响应速度和并发处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值