apache2.2.1 mod_jk 两个apache-tomcat-6.0.20 负载均衡
昨天突然页面访问慢,半天不响应,用下面的命令
watch -n 1 -d "pgrep httpd|wc -l" 一看httpd 当前的进程数已经达到了最大值
于是查看 apache 的工作模式是 ./apachectl -l
是 prefork模式
一。修改/apache/conf/extra 目录下的 httpd-mpm.conf文件修改最大连接数量
修改前:最大连接数是 150
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
修改后:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 8000
MaxClients 8000
MaxRequestsPerChild 20
</IfModule>
二,修改workers.properties
worker.list=jkstatus, loadbalancer ,tomcat1 ,tomcat2
worker.maintain=60
worker.jkstatus.type=status
worker.tomcat1.port=8009
worker.tomcat1.host=127.0.0.1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.redirect=tomcat2
worker.tomcat1.socket_keepalive=True
worker.tomcat1.socket_timeout=60
worker.tomcat1.retries=20
worker.tomcat1.connection_pool_size=1000
worker.tomcat1.connection_pool_minsize=100
worker.tomcat1.connection_pool_timeout=60
worker.tomcat1.recovery_options=3
worker.tomcat2.port=8109
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.redirect=tomcat1
worker.tomcat2.socket_keepalive=True
worker.tomcat2.socket_timeout=60
worker.tomcat2.retries=20
worker.tomcat2.connection_pool_size=1000
worker.tomcat2.connection_pool_minsize=100
worker.tomcat2.connection_pool_timeout=60
worker.tomcat2.recovery_options=3
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2
worker.loadbalancer.retries=20
~
三,修改tomcat的配置文件server.xml
<Connector port="8009" maxHttpHeaderSize="8192"
maxThreads="1000" minSpareThreads="30" maxSpareThreads="50"
acceptCount="1000"
enableLookups="false" redirectPort="8443" connectionTimeout="60000"
disableUploadTimeout="true" protocol="AJP/1.3" URIEncoding="GBK"/>
修改之前这俩都是 150
然后重启两个tomcat,重启apache ,然后在用命令 watch -n 1 -d "pgrep httpd|wc -l" 查看当前httpd 进程数
不一会就回增到1k ,2k ,以上,查了半天原因,网上搜了半天也没找到原因,偶尔看了一个帖子,有个人也碰到过,后来
经查是mysql数据库的原因,由于我们的是程序先读缓存文件,然后异步在生成要访问的文件,所以在apache重启后,访
问页面特别快,所有就没往数据库这方面想,感觉数据库不会有什么问题
但是httpd进程还是一直增加,只有重启apache才能缓解,这个问题困扰了一天,周一早晨来后,有同事说动态接口一直
访问不了,但是别的度缓存文件的页面却很流畅,我本地起了下系统,访问动态接口,看日志一直 不动,连数据库那卡住
了,这次意识到真是数据库出了问题,赶紧联系db 查看数据库,原来数据库hang住了。
哎,之前一直不知道是啥原因,看来httpd激增不一定就是apache配置的问题,也应该从程序或数据库方面考虑。