Java EE应用Q同旉|在两个Tomcat(5.5.27)实例上,前面放了个Apache(httpd-2.2.19-win32-x86-no_ssl)Q通过mod_jk(1.2.32)做负载均衡,同一台物理服务器Q操作系lؓ64位的Windows Server 2003 SP2。现象是60+客户端,q_每个客户端每U请求数2ơ,单个h正常响应旉?00ms以内Q即每秒冲进?20个请求,q发量最多在60上下QApache已不堪"?负,静态资源响应时间都过10sQ同时Tomcat和数据库服务器均正常。凭我的l验Q同L(fng)压力直接压到Tomcat也不至于q么隄。看来问题出在Apache?/p>
首先修改httpd.conf配置文gQ打开status模块Q?/p>
LoadModule status_module modules/mod_status.so
<Location /status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1 #需要的话也可放开为all
</Location>
q样我们p通过/status面查看服务器当前的状态信息,l果观察到worker(即线E?C?4Q坑爹啊Q难怪撑不住。我记得以前Windows下面的Apache默认U程数没q么的。找准问题,接下来就好办了:
<IfModule mpm_winnt.c>
  ThreadsPerChild 300
MaxRequestsPerChild 0
</IfModule>
E微解释一下:mpm_winnt.c是Apache为Windows NT提供的MPM (Multi-Processing Module)Q对应到Linux环境下,则有prefork.c(多进E?每进E?个线E?和worker.c(多进E?多线E?两种MPM可选。Windows下面只会有父与子两个q程Q因此单个子q程能同时v多少U程(ThreadsPerChild)成了调优的关键。另一个参数MaxRequestsPerChild的含义是单个子进E篏计最多处理到个hQ超q该值则退出重启,q是Z防止内存泄露慢慢拖垮整个服务器而做的防御性措施,0表示不做此限制?/p>
新配|上U后Q客L(fng)数量利冲上200+。Case closed.