首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 高性能WEB开发 >

apache+tomcat+JK 集群 并发,该如何处理

2013-09-07 
apache+tomcat+JK 集群 并发 问题:并发一直上不去。求大神指点。测试机环境:Red hat6.3 IBM 8G 内存 4核处理

apache+tomcat+JK 集群 并发
 问题:并发一直上不去。求大神指点。

测试机环境:Red hat6.3 IBM 8G 内存 4核处理器

主要配置清单:

httpd-mpm.conf

<IfModule mpm_prefork_module>
    ServerLimit      4000
    StartServers      128
    MinSpareServers   128
    MaxSpareServers   256
    MaxClients       4000
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          5
    ServerLimit          20
    ThreadLimit         200
    MaxClients         4000
    MinSpareThreads      25
    MaxSpareThreads     250
    ThreadsPerChild     200
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_beos_module>
    StartThreads            10
    MaxClients              50
    MaxRequestsPerThread 10000
</IfModule>

<IfModule mpm_netware_module>
    ThreadStackSize      65536
    StartThreads           250
    MinSpareThreads         25
    MaxSpareThreads        250
    MaxThreads            1000
    MaxRequestsPerChild      0
    MaxMemFree             100
</IfModule>

<IfModule mpm_mpmt_os2_module>
    StartServers           2
    MinSpareThreads        5
    MaxSpareThreads       10
    MaxRequestsPerChild    0


</IfModule>

<IfModule mpm_winnt_module>
    ThreadsPerChild     2000
    MaxRequestsPerChild    0
</IfModule>

workers.properties

worker.list = controller,tomcat1,tomcat2,tomcat3  
   
#========tomcat1========  
worker.tomcat1.port=7009       #ajp13 端口号,在tomcat下server.xml配置,默认8009  
worker.tomcat1.host=192.168.45.33  #tomcat的主机地址,如不为本机,请填写ip地址  
worker.tomcat1.type=ajp13  
worker.tomcat1.lbfactor = 1    #server的加权比重,值越高,分得的请求越多  
#========tomcat2========  
worker.tomcat2.port=6009       #ajp13 端口号,在tomcat下server.xml配置,默认8009  
worker.tomcat2.host=192.168.45.33  #tomcat的主机地址,如不为本机,请填写ip地址  
worker.tomcat2.type=ajp13  
worker.tomcat2.lbfactor = 1    #server的加权比重,值越高,分得的请求越多  

#========tomcat3========  
worker.tomcat3.port=5009       #ajp13 端口号,在tomcat下server.xml配置,默认8009  
worker.tomcat3.host=192.168.45.33  #tomcat的主机地址,如不为本机,请填写ip地址  
worker.tomcat3.type=ajp13  
worker.tomcat3.lbfactor = 1    #server的加权比重,值越高,分得的请求越多  
 
#========controller,负载均衡控制器========  
worker.controller.type=lb  
worker.controller.balance_workers=tomcat1,tomcat2,tomcat3   #指定分担请求的tomcat,旧版本中的balanced_workers,已不再推荐使用!  
worker.controller.sticky_session=1 #sticky_session为1表示, 

httpd.conf

LoadModule jk_module modules/mod_jk.so
JkLogFile /var/log/mod_jk.log
JkShmFile logs/mod_jk.shm
JkLogLevel info
JkWorkersFile conf/workers.properties
JkMount /* controller


server.xml

<Executor name="tomcatThreadPools" namePrefix="catalina-exec-"  
                  maxThreads="1000" minSpareThreads="20" maxIdleTime="15000" />
        <Connector executor="tomcatThreadPools"  
               port="6080" protocol="org.apache.coyote.http11.Http11NioProtocol"  
               connectionTimeout="60000"  
               keepAliveTimeout="15000"  


               minProcessors="100"
               maxProcessors="1000"
               maxThreads="1000"
               minSpareThreads="100"
               maxSpareThreads="500"
               maxKeepAliveRequests="1"  
               redirectPort="6443"  
               maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="1000" disableUploadTimeout="true"/>
<Connector executor="tomcatThreadPools"  
               keepAliveTimeout="15000"  
               maxThreads="1000"
               minSpareThreads="100"
               maxSpareThreads="500"
               acceptCount="1000"
               connectionTimeout="20000"
               maxKeepAliveRequests="1"  port="6009" protocol="AJP/1.3" redirectPort="6443" />


tomcat启动内存

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms1024m -Xmx1024m -Duser.timezone=Asia/Shanghai"


测试结果:

Apache+单个tomcat 静态页面 : 并发 1500  请求转发:1500

apache+两个tomcat 静态页面: 并发2300  请求转发: 1800

apache+三个tomcat静态页面: 并发2300   请求转发:1900  apache tomcat mod_jk Linux 并发


[解决办法]
首先,要确认你确实编译时用了 work 模块,http://localhost:端口/server-info

其次,删除所有非work模块的mpm配置信息,免得混淆视听。

Work模式,简单点说:是多进程派生更多线程,然后每个线程负责一个请求的模式。
参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/worker.html

关于你的配置,大概是:
<IfModule mpm_worker_module>
    AcceptMutex pthread -- 用于串行化多个子进程在(多个)网络套接字(socket)上接受请求的方法
    ThreadLimit         200 -- 每个子进程可派生的线程数上限(在其它指令之前放置)
    ThreadsPerChild     200 -- 每个子进程建立的线程数(在其它指令之前放置)
    StartServers          5 -- 初始进程数量
    ServerLimit          20 -- 进程数量上限
    MaxClients         4000 -- 允许同时服务的最大接入请求数量(最大并发连接数)
    MinSpareThreads      25 -- 最小空闲线程数
    MaxSpareThreads     250 -- 最大空闲线程数
    MaxRequestsPerChild   0 -- 每个子进程在其生存期内允许伺服的最大请求数量(0就好)
</IfModule>
这段配置暂时没啥问题。

所以你可以在压力测试时监控下:http://localhost:端口/server-status

然后再探讨下情况。

热点排行