当前位置: > Linux服务器 > apache >

Apache并发处理模块

时间:2014-12-20 21:31来源:linux.it.net.cn 作者:IT

查看连接数和当前的连接数,分别是
netstat -ant | grep $ip:80 | wc -l
netstat -ant | grep $ip:80 | grep EST | wc -l

ThreadsPerChild 每个子进程的服务线程数目 默认值25
StartServers apache启动的时候就开启的子进程数 默认值3
MinSpareThreads 最小空闲线程数 默认值75
MaxSpareThreads 最大空闲线程数,apache在运行的时候会让总的空闲线程数保持在MinSpareThreads和MaxSpareThreads之间,这两个参数用默认值就可以了,一般情况下没必要去调整它们 默认值250
MaxClients 最大客户端并发处理数(最大线程数),MaxClients除以ThreadsPerChild得到的值的就是最大可能达到的子进程数,如果服务器的并发请求数超过了MaxClients,那么apache会报这样的错误:server reached MaxClients setting, consider raising the MaxClients setting 默认值16*25 = 400
ServerLimit 最大进程数限制,这个参数值必须大于或等于MaxClients除以ThreadsPerChild得到的值。这个参数是硬限制,直接重启apache(apache restart)不会生效,必须先停止apache(apache stop)再启动apache(apache start)才生效 worker模式下默认值是16,prefork模式则是256
ThreadLimit 每个进程的最大线程数限制,也就是说这个参数决定了ThreadsPerChild的最大值。如果这个参数设得比ThreadsPerChild大很多的话,那么会浪费掉很多共享内存。设置过大还可能会导致apache无法启动或者系统不稳定。这个参数也是硬限制。如果要设置的话,ServerLimit和ThreadLimit必须放在其它设置的前面 默认值64
MaxRequestsPerChild 单个子进程在其生命周期内处理的总请求数限制,当某个子进程处理过的总请求数到达这个限制后这个进程就会被回收,如果设为0,那么这个进程永远不会过期(这样如果有内存泄露的话就会一直泄露下去……)

<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
</IfModule>

ServerLimit 要放在 MaxClients 前面!!!

另外,調整之後如果以 apachectl graceful 重開 Apache,ServerLimit 的設定並不會生效,log 檔裡會出現以下的錯誤訊息:

[Wed Aug 11 22:31:41 2009] [warn] WARNING: Attempt to change ServerLimit ignored during restart
如果以 apachectl restart 重開也沒用,一樣會出現前面提過的錯誤訊息:
WARNING: MaxClients of 300 exceeds ServerLimit value of 256 servers,
lowering MaxClients to 256.  To increase, please see the ServerLimit
directive.
在前面提過的官網說明中有一段隱晦的說明:

Any attempts to change this directive during a restart will be ignored, but MaxClients can be modified during a restart.
因此要使 ServerLimit 生效,必須先停止 Apache: apachectl stop,再開啟 Apache: apachectl start

Apache中MaxRequestsPerChild参数及配置

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。
在处理 “MaxRequestsPerChild”请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
如果 MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,
但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出





(责任编辑:IT)
------分隔线----------------------------