調整Apaceh最高在線人數的MaxClients及MaxRequestsPerChild 參數優化

MaxClients 預設是 150 

服務器的能力畢竟是有限的,不可能同時處理無限多的連接請求,因此參數 Maxclients就用於規定服務器支持的最多並發訪問的客戶數,如果這個值設置得過大,系統在繁忙時不得不在過多的進程之間進行切換來為太多的客戶進行服務,這樣對每個客戶的反應就會減慢,並降低了整體的效率。

如果這個值設置的較小,那麼系統繁忙時就會拒絕一些客戶的連接請求。當服務器性能較高時,就可以適當增加這個值的設置。對於大型網站,應該使用提高服務器效率的策略,因此這個參數不能超過硬件本身的限制,如果頻繁出現拒絕訪問現象,就說明需要升級服務器硬體了。當不太在意對客戶瀏覽器的反應速度,或者認為反應速度較慢也比拒絕連接好,就也可以略微超過硬件條件來設置這個參數。

提高 Apache 的 MaxClients在線人數的方法:

如果碰到網頁伺服器突然變慢,然後網頁服務停止,在 apache 的 error log 找到以下語句:

[error] server reached MaxClients setting, consider raising the MaxClients setting

那麼就是 Apache 超過最大連線數,如果是 Apache 2.0以上版本的話便不用重新編譯,用記事本打開apache2\conf\httpd.conf修改 MaxClients 選項:

<IfModule prefork.c>
StartServers 150
MinSpareServers 10
MaxSpareServers 20
ServerLimit 4000
MaxClients 4000
MaxRequestsPerChild 500
</IfModule>

完成後重新啟動 Apache 即可。

MaxClients應該怎麼設置最好:

雖然通過設置ServerLimit,我們可以把MaxClients加得很大,但是往往會適得其反,系統耗光所有記憶體。以我手頭的一台服務器為例:記憶體2G,每個apache進程消耗大約0.5%(可通過psaux來確認)的記憶體,也就是10M,這樣,理論上這台服務器最多跑200個apache進程就會耗光系統所有記憶體存,所以,設置MaxClients要慎重。

假如服務器內存有2G,除去常規啟動的服務大約需要500M(保守估計),還剩1.5G可用,那麼理論上可以支持1.5*1024*1024*1024/ = 8053

MaxClients 設置上最好除以2 = 4000 (2G的記憶體) =>調整是依個人情況,不需要照著做,因為我的網站人數不多,所以,設置上不需要一次設

******************************

Apache 配置 MaxRequestsPerChild 參數優化

通常在「Windows任務管理器-進程」中可以看到兩個apache.exe進程,一個是父進程、一個是子進程,父進程接到訪問請求後,將請求交由子進程處理。

MaxRequestsPerChild這個指令設定一個獨立的子進程將能處理的請求數量。在處理「MaxRequestsPerChild 數字」個請求之後,子進程將會被父進程終止,這時候子進程佔用的內存就會釋放,如果再有訪問請求,父進程會重新產生子進程進行處理。

如果 MaxRequestsPerChild預設為0(無限)或較大的數字(例如10000以上)可以使每個子進程處理更多的請求,不會因為不斷終止、啟動子進程降低訪問效率,但MaxRequestsPerChild設置為0時,如果佔用了200~300M記憶體,即使負載下來時佔用的記憶體也不會減少。

記憶體較大的服務器可以設置為0或較大的數字。記憶體較小的服務器不妨設置成50、100、200,以防記憶體緩衝區溢位。

對 Apache進行優化:

編輯httpd.conf,設置HostnameLookups、KeepAlive、MaxKeepAliveRequests 以及KeepAliveTimeout四個參數,調整MaxSpareServers、ServerLimit、MaxClients以及 MaxRequestsPerChild參數,還可以考慮棄用prefork而採用worker MPM。

設置mod_deflate及mod_expires模塊,另外還可以考慮開啟mod_cache和mod_mem_cache模塊。



來訪數: (1830)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *