首页 > 关于tomcat的mod_jk的选项connect_timeout疑问

关于tomcat的mod_jk的选项connect_timeout疑问

我在做tomcat(3个)集群,前端用apache,中间转发使用mod_jk,线上环境出现过这样的问题:一台tomcat因为某种原因挂掉(Full GC),apache却没有将剩下的请求发到其它tomcat,而是还在不断的累积异常的请求,导致进程数超标。

查阅tomcat 官方文档 ,里面对worker有这么几个参数:socket_timeoutsocket_connect_timeoutconnection_timeout,意义都解释的很清楚,唯一不明白的是,JK与tomcat之间socket连接超时是真实的请求判断的,还是内部ping/pong机制判断的,因为设置retries时如果是real request,插入数据结果超时没完成,retries一次是否会导致产生两条记录。如果确定是ping/pong检测那就不会产生这样的问题,产生的新的问题是,tomcat的内存溢出,采用ping去检测状态时能否得到回响,timeout时间内得不到pong那自然使用其它tomcat,但tomcat内存溢出导致不能处理请求并不是网络不通,有回响也不一定。

题中有好几个问题,能否有一个确定的答案

worker.properties:

worker.properi
# servers
worker.list=controller,jkstatus

# ====== tomcat0 =======
worker.s7.port=8709
worker.s7.host=172.16.10.253
worker.s7.socket_timeout=30
worker.s7.connect_timeout=30000
worker.s7.ping_mode=connect
worker.s7.type=ajp13
worker.s7.lbfactor=1
# ====== tomcat1 =======
worker.s8.port=8809
worker.s8.host=172.16.10.253
worker.s8.socket_timeout=30
worker.s8.connect_timeout=30000
worker.s8.ping_mode=connect
worker.s8.type=ajp13
worker.s8.lbfactor=1
# ====== tomcat2 =======
worker.s9.port=8909
worker.s9.host=172.16.10.253
worker.s9.socket_timeout=30
worker.s9.connect_timeout=30000                                                                                                                              
worker.s9.ping_mode=connect
worker.s9.type=ajp13
worker.s9.lbfactor=1
# ====== controller ====
worker.controller.type=lb
worker.controller.retries=2 
worker.controller.balance_workers=s7,s8,s9
worker.controller.sticky_session = 1

worker.jkstatus.type=status

server.xml:

    <Connector port="8709" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" 
               connectionTimeout="30000" maxThreads="200" acceptCount="100"  minSpareThreads="10"
               enableLookups="false"/> 

使用memcached来管理session同步。

【热门文章】
【热门文章】