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

[经验分享] Tomcat连接性能调优

[复制链接]

尚未签到

发表于 2017-1-22 08:47:13 | 显示全部楼层 |阅读模式
  Tomcat是一款非常流行的Apache的开源Web服务器。
  今天我们主要来探讨Tomcat下面的server.xml中的连接器配置对交易系统的性能影响。
  我们来假设如下一种场景:
  一种交易需要通过客户端C来远程Hessian来同步调用服务端S的服务A来完成整笔交易,客户端C设置的交易超时时间为60秒(比较简单但不精准的做法是将客户端的Hessian的连接超时时间和接收超时时间都设置成60秒);高峰期同一时刻到达客户端C的交易请求笔数为800笔;服务端对每笔交易的平均处理时间为10秒;基于客户端交易超时时间,服务端的Tomcat的Connector 中connectionTimeout也设置成60秒。
  服务端S提供的服务A是通过Hessian来暴露服务接口的,服务端程序部署在Tomcat上,Tomcat中的server.xml中连接器设置如下:
  <Connector port="8090" protocol="HTTP/1.1"   connectionTimeout="60000"   redirectPort="8443" />
  只要是Web服务器,都是可以设置给客户端提供连接的最大连接数的,如果Tomcat的Connector 如上设置,则默认提供的最大连接数(即线程数maxThreads)是200,等待连接数(acceptCount)是100。即如果此时有800笔交易同时到来,由于服务端平均处理时间为10秒,所以在10秒钟之内,将有800-200-100=大约500笔交易会在客户端报超时,注意,这个超时和客户端设置的交易超时时间60秒无关,是Tomcat强制终止客户端多余的连接造成的超时。但如果你服务端处理业务的交易的平均时间不是10秒而是几毫秒甚至是不需要什么时间的,则客户端报超时的交易会远小于500笔。
  所以,根据假设的高峰期交易量800笔和服务端平均处理交易时间10秒,我们认为maxThreads设置成400、acceptCount也设置400比Tomcat的默认值更合适,这样的话,服务端可以先处理到来的800笔交易中的400笔,让另外400笔处于等待状态,等前面的400笔交易处理完成,再去等待队列中取400笔交易来处理,这样保证了处理所有的交易,也不至于让客户端等太久。
  <Connector port="8090" protocol="HTTP/1.1"  connectionTimeout="60000"  redirectPort="8443"  maxThreads="400" acceptCount="400" />
  于是有人会想,如果我高峰期并发交易有几万笔,难道我maxThreads也设置成几万?这明显是不现实也是浪费的。幸运的是Tomcat有可配置的线程连接(线程)池执行器(Executor),如下为Tomcat的默认配置:
  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  maxThreads="150" minSpareThreads="4"/>
  我们如何让我们的连接器使用上面的线程池执行器呢?很简单:
  <Connector executor="tomcatThreadPool"  port="8090" protocol="HTTP/1.1"  connectionTimeout="60000"   redirectPort="8443" />
  请注意,此时你的连接器Connector 就不需要设置maxThreads和acceptCount,即使你设置了,也会被Executor 的设置所覆盖。这样得话,已经没有了acceptCount的概念了。Tomcat可以在该8090端口上处理无限个客户端连接,直到客户端等待交易服务超时或Tomcat连接器设置的connectionTimeout时间超时。如果是我们现在假定的交易场景,我们的连接池执行器中的maxThreads设置成400且更合适,这样,我们能处理高峰期最大交易数为(60 / 10)  * 400 = 2400(交易超时时间和connectionTimeout中的最大值/服务端平均交易处理时间*maxThreads)笔交易,远大于原来假定的800笔交易。
  当然,所有Web容器所能同时获取的客户端连接数还和操作系统有关,这里暂不讨论。
  备注:连接器Connector是没有maxProcessors和minProcessors这两个属性的。

运维网声明 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-331800-1-1.html 上篇帖子: Tomcat 7 性能优化(转) 下篇帖子: tomcat绑定域名本地访问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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