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

[经验分享] apache+mod_jk+tomcat(jboss) 架构连接池相关配置解读及原则

[复制链接]

尚未签到

发表于 2017-1-13 09:27:48 | 显示全部楼层 |阅读模式
  在实际使用apache+mod_jk+tomcat(jboss) 架构的过程中,时常碰到对各处连接池数设置含义不清楚,设置错误,导致故障。本文集中讲述连接池相关内容:

一、apache
  在 apache 2.0 中,引入了影响性能的最核心模块:MPM(multi‐processing‐modules), MPM包含多种工作模式,MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool} 。最常使用的 worker 模型为例。它支持多线程和多进程混合工作。
在httpd.conf中时常有如下配置:

<IfModule worker.c>
ServerLimit         3000
ThreadLimit         128
MaxClients          2048
StartServers        7
ThreadsPerChild     128
MinSpareThreads     75
MaxSpareThreads     250
MaxRequestsPerChild 10000
</IfModule>

指令说明:


  • ServerLimit:服务器允许配置的进程数上限。


  • ThreadLimit:每个子进程可配置的线程数上限。


  • MaxClients:客户端最大请求数量(最大线程数)。


  • StartServers:服务器启动时建立的子进程数量。


  • ThreadsPerChild:每个子进程建立的线程数。


  • MinSpareThreads:最小空闲线程数,默认值是"75"。


  • MaxSpareThreads:设置最大空闲线程数。默认值是"250"。


  • MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到MaxRequestsPerChild的限制后,子进程将会结束。

配置原则:


  • ServerLimit:


  •  只有当MaxClients和ThreadsPerChild > 16 (默认值16) ,需要配置该值。
  • Apache在编译时内部有一个硬限制"ServerLimit 20000"(对于preforkMPM为"ServerLimit 200000")。你不能超越这个限制
  • ServerLimit<=MaxClients 并且MaxClients<=ThreadsPerChild.
  • restart方式重启动将不会生效


  • ThreadLimit:


  • 该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。(如果将ThreadLimit设置成一个高出ThreadsPerChild实际需要很多的值,将会有过多的共享内存被分配)
  • 对于mpm_winnt,ThreadLimit的默认值是1920;对于其他MPM这个值是64。
  • Apache在编译时内部有一个硬性的限制"ThreadLimit 20000"(对于mpm_winnt是"ThreadLimit 15000"),你不能超越这个限制。
  • restart方式重启动将不会生效。


  • MaxClients:


  • 默认值 是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果
  • 增加MaxClients的时候,必须同时增加 ServerLimit或则ThreadsPerChild的值
  • MaxClients <= ServerLimit * ThreadsPerChild,并且MaxClients必须是ThreadsPerChild的倍数


  • StartServers:


  • worker默认值是"3"
  • StartServers<ServerLimit


  • ThreadsPerChild:


  • 对于mpm_winnt,ThreadsPerChild的默认值是64;对于其他MPM是25。
  • ThreadLimit >= ThreadsPerChild
  • MaxClients <= ServerLimit * ThreadsPerChild,


  • MinSpareThreads:


  • 这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
  • MinSpareThreads<ThreadsPerChild.


  • MaxSpareThreads:


  • 这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程
  • MaxSpareThreads>=MinSpareThreads+ThreadsPerChild.


  •  MaxRequestsPerChild:


  • 如果MaxRequestsPerChild为"0",子进程将永远不会结束
  • 将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;
    给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

二、 Mod_Jk 

worker.localnode.connection_pool_size=128
worker.localnode.connection_pool_minsize=25
worker.localnode.connection_pool_timeout=600
   它实际上是创建了一个连接到 AJP 后端的连接池。通常情况下,这个值和 apache 连接池的
ThreadsPerChild 一致就可以了。如果这个值不设置,JK 将自动读取配置,设置为和ThreadsPerChild 一致。 

       当大并发量存在时,即便Apache的JK组件与tomcat保持足够多数量的连接,也不能有效避免HTTP 503错误,因为在大量的请求被转发到tomcat时,tomcat无法相应那么多请求,于是抛出了503。需要在Connector的地方配置maxThreads参数,将最大线程数调大。

三、TOMCAT

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="1000" URIEncoding="UTF-8" />
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="99" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
  说明:

    这里的指标的含义和apache的类似,配置上最主要关心:maxThreads,并且需要注意对于的端口,如果是mod_jk 对于配置  port="8009" protocol="AJP/1.3" 对应的 Connector参数。

四、jboss7
  jboss7 对应有两个参数一个是系统参数:MAX_THREADS

<system-properties>   
<property name="org.apache.tomcat.util.net.MAX_THREADS" value="200"/>
<property name="org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZ" value="8234"/>
<property name="org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT" value="20000"/>
</system-properties>
  另外一个是:max-connections

<connector name="AJP" protocol="AJP/1.3" socket-binding="ajp" max-connections=”“ scheme="http" enable-lookups="false" redirect-port="8443"/>
  对于默认的 JIO connector 它们是一样的,max-connections 会覆盖MAX_THREADS。

运维网声明 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-327784-1-1.html 上篇帖子: apache通过基于域名方式的虚拟主机与多个weblogicServer集成 下篇帖子: 使用Myface时出现No context init parameter 'org.apache.myfaces.ADD_RESOURCE_CLASS' fou
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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