最近發(fā)現自己是個(gè)干雜活兒的人,因此把本博的名字都改成了“不求甚解”,純粹都為了解決眼前的問(wèn)題,這樣的工作方式已經(jīng)完完全全背離了自己的習慣。廢話(huà)少說(shuō),切入正題,最近對Apache中的一些參數做了些了解,下面就記錄一下我的理解。
- # worker MPM
- # ThreadLimit: maximum setting of ThreadsPerChild
- # ServerLimit: maximum setting of StartServers
- # StartServers: initial number of server processes to start
- # MaxClients: maximum number of simultaneous client connections
- # MinSpareThreads: minimum number of worker threads which are kept spare
- # MaxSpareThreads: maximum number of worker threads which are kept spare
- # ThreadsPerChild: constant number of worker threads in each server process
- # MaxRequestsPerChild: maximum number of requests a server process serves
- <IfModule worker.c>
- ThreadLimit 125
- ServerLimit 320
- StartServers 5
- MaxClients 8000
- MinSpareThreads 125
- MaxSpareThreads 1250
- ThreadsPerChild 125
- MaxRequestsPerChild 1000
- </IfModule>
其中最重要的參數是
ThreadsPerChild和MaxClients:
- ##ThreadsPerChild 每個(gè)子進(jìn)程建立的線(xiàn)程數,子進(jìn)程在啟動(dòng)時(shí)建立這些線(xiàn)程后就不再建立新的線(xiàn)程了
- ##MaxClients 允許同時(shí)伺服的最大接入請求數量(在worker下就是最大線(xiàn)程數量)
-
- ##ServerLimit:對最大子進(jìn)程數的上限,該值必須大于等于MaxClients/ThreadsPerChild
- ##ThreadLimit:對ThreadsPerChild的上限,該值必須大于等于 ThreadsPerChild,如果將ThreadLimit設置成一個(gè)高出實(shí)際需要很多的ThreadsPerChild值,將會(huì )有過(guò)多的共享內存被 分配,應當和ThreadsPerChild可能達到的最大值保持一致.
- ##StartServers:服務(wù)器啟動(dòng)時(shí)的服務(wù)進(jìn)程數目,該值肯定小于等于ServerLimit
- ##MinSpareThreads和MaxSpareThreads:通過(guò)新建或結束子進(jìn)程的方式,將空閑線(xiàn)程的總數維持在這個(gè)范圍內
- ##MaxRequestsPerChild:用于控制服務(wù)器建立新進(jìn)程和結束舊進(jìn)程的頻 率,其實(shí)是一個(gè)為了防止內存溢出的參數,每個(gè)子進(jìn)程在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制后,子進(jìn)程將 會(huì )結束。對于KeepAlive鏈接,只有第一個(gè)請求會(huì )被計數。事實(shí)上,它改變了每個(gè)子進(jìn)程限制最大鏈接數量的行為。
可以通過(guò)檢查HTTPServer/logs/error_log日志,判斷MaxClients是否需要增加,如果有下面的報錯,就說(shuō)明apache自上次重啟至今,曾經(jīng)發(fā)生過(guò)達到MaxClients的情況:
-
- Tue Jun 07 16:36:03 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting
需要注意的是,這樣的報錯并不會(huì )出現多次,當第二次達到MaxClients時(shí),error_log不會(huì )記錄。
還有一種可以實(shí)時(shí)看到連接數的方法,就是打開(kāi)
server-status頁(yè)面,設置方法如下:
1. 去掉以下部分的注釋
- LoadModule status_module modules/mod_status.so
- <IfModule mod_status.c>
- ExtendedStatus On
- </IfModule>
2.修改以下部分
- <Location /server-status>
- SetHandler server-status
- # Order deny,allow
- # Deny from all
- Allow from all
- </Location>
重啟ihs
使用:http://yourhost/server-status 可以進(jìn)入監控頁(yè)面
如果瀏覽器支持刷新,可以http://your_host/server-status?refresh=5 以便每 5 秒鐘刷新一次
在打開(kāi)的監控頁(yè)面中:"." Open slot with no current process,這里面的單個(gè)進(jìn)程的“.”的數量其實(shí)對應與ThreadLimit這個(gè)值。
- <IfModule worker.c>
- ThreadLimit 10
- ServerLimit 2
- StartServers 1
- MaxClients 2
- MinSpareThreads 1
- MaxSpareThreads 2
- ThreadsPerChild 1
- MaxRequestsPerChild 1
- </IfModule>
httpd.conf的MPM配置如上例,在監控頁(yè)面中的輸出如下,其中有2個(gè)進(jìn)程,各10個(gè)ThreadLimit,但由于ThreadsPerChild的限制,其實(shí)很多.是沒(méi)有用的。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。