`
manzhizhen
  • 浏览: 294282 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tomcat连接性能调优

    博客分类:
  • Web
阅读更多

         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这两个属性的。

分享到:
评论

相关推荐

    tomcat7性能调优

    【Tomcat7性能调优】是一项关键的任务,它关乎服务器的稳定性和响应速度。Tomcat作为流行的Java应用服务器,其性能优化能显著提升应用程序的运行效率。本文将深入探讨如何针对Tomcat7进行调优。 首先,我们关注的是...

    tomcat7 优化 性能调优

    ### Tomcat7 优化与性能调优 #### 一、引言 在现代Web应用开发中,Apache Tomcat因其轻量级、灵活且易于部署的特点成为开发者们的首选应用服务器之一。然而,在面对高并发访问场景时,如何有效地优化Tomcat以提高...

    Tomcat服务器性能调优几个方面[定义].pdf

    Tomcat服务器性能调优是提升应用程序运行效率的关键环节,涉及到多个层面的调整。以下将详细阐述从操作系统、Java虚拟机、Apache与Tomcat的集成以及Apache和Tomcat集群等方面的调优策略。 首先,**操作系统调优**是...

    Tomcat优化-Tomcat 的性能调优的原理和方法

    - **连接器配置优化**:调整Tomcat连接器的相关参数,如最大连接数、空闲时间等。 - **线程池配置**:合理设置线程池大小,以平衡响应时间和资源利用。 - **缓存策略**:利用JSP文件缓存和HTTP响应缓存策略,减少...

    使用visualvm工具进行tomcat性能调优和性能监控.docx

    使用 VisualVM 工具进行 Tomcat 性能调优和性能监控 本文主要介绍了如何使用 VisualVM 工具来进行 Tomcat 的性能调优和性能监控。下面将详细介绍相关知识点: 一、JDK 内存优化 在 Tomcat 中,默认的堆大小为 128...

    Tomcat7性能优化

    ### Tomcat7性能优化策略详解 #### 一、引言 在现代Web应用开发中,Tomcat作为一款广泛使用的开源Web服务器容器,其性能优化对于提高网站并发处理能力至关重要。通过对Tomcat进行合理配置和优化,可以显著提升系统...

    Tomcat性能调优实战总结

    【Tomcat性能调优实战总结】 Tomcat性能调优是一个涉及多方面技术的复杂过程,主要包括对外部环境的调整和Tomcat自身配置的优化。在实际应用中,我们需要通过压力测试来评估系统的性能表现,然后根据测试结果进行...

    Tomcat性能调优方案[参考].pdf

    Tomcat性能调优方案 一、操作系统调优 操作系统调优是指通过调整操作系统的设置来提高服务器的性能。对于操作系统优化来说,需要尽可能地增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。通过...

    优化提高tomcat性能.Tomcat参数调优

    通过上述方法,我们可以针对不同场景对Tomcat进行调优,提升其处理请求的能力,同时减少资源消耗,保证应用的稳定性和性能。当然,调优是一个持续的过程,需要根据实际业务情况不断进行监控和调整。

    Tomcat 调优及 JVM 参数优化

    这篇文章将深入探讨Tomcat调优与JVM参数优化的各个方面,帮助你提升服务器性能。 首先,我们来了解一下Tomcat调优的基础知识。Tomcat调优主要包括以下几个方面: 1. **线程池配置**:调整`maxThreads`和`...

    Tomcat性能调优及配置技巧

    ### Tomcat性能调优及配置技巧 #### 一、Tomcat设置Gzip,减少网络流量 Gzip是一种常用的压缩算法,通过将响应的数据进行压缩,可以显著减少数据在网络中的传输量,从而加快页面加载速度,提升用户体验。在Tomcat...

    性能调优文档_自动化测试

    【性能调优文档_自动化测试】的文档主要涵盖了在性能测试过程中针对各种中间件和系统的调优策略。这里,我们详细解析其中涉及的关键知识点。 **1. 中间件调优** 1.1 **Tomcat调优** 1.1.1 **JVM大小调整** - `...

    tomcat优化调优文档

    - **监控界面**:部署完成后,通过访问LambdaProbe提供的Web界面,可以直观地查看到详细的Tomcat性能数据以及连接器的状态等信息。 使用LambdaProbe可以更细致地了解Tomcat各方面的运行状态,有助于定位潜在的...

Global site tag (gtag.js) - Google Analytics