如何設置httpd-mpm-conf的參數


原文鏈接:http://blog.sina.com.cn/s/blog_626998030102wohs.html

首先確定apache是使用哪種工作模式
是prefork模式還是worker模式
查看方法#apachectl -l 

顯示結果:
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_include.c
  mod_filter.c
  mod_log_config.c
  mod_env.c
  mod_setenvif.c
  prefork.c 
  http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_cgi.c
  mod_negotiation.c
  mod_dir.c
  mod_actions.c
  mod_alias.c
  mod_so.c
紅色加粗部分顯示為Prefork模式。

在httpd-mpm.conf中,prefork默認的配置為:

       StartServers               5
       MinSpareServers              5
       MaxSpareServers              10
       MaxClients                 150
       MaxRequestsPerChild             0

以上參數各代表什么含義,如何評估呢?這個需要先弄清楚其工作原理。

prefork 模式的工作原理大概為:
控制進程在最初建立StartServers個子進程后, 為了滿足MinSpareServers設置的需要,創建一個進程,等待一秒鍾,繼續創建第二個,等待一秒鍾,繼而創建四個,如此按指數級增加創建的進程 數,最多達到每秒32個,直到滿足MinSpareServers設置的值為止,這也就是預派生(prefork)的由來。這種模式可以使得不必在請求到 來時再產生新的進程,從而減小了系統開銷以增加性能。

MaxSpareServers 設置了最大的空閑進程數,如果空閑進程數大於這個值,Apache會自動kill某些多余進程。這個值一般不要設的過大,但如果設的比 MinSpareServers小,Apache會自動把它調為MinSpareServers+1。如果站點負載較大的話,可考慮同時加大 MinSpareServers和MaxSpareServers。

MaxRequestsPerChild設置的是每個子進程可以 處理的請求數。每個子進程在處理了MaxRequestsPerChild個請求后將自動銷毀。0意味着無限,即子進程永不銷毀。雖然缺省設為0可以使每 個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:
1. 可防止意外的內存卸漏;
2. 在服務器負載下降的時侯會自動減少子進程數。
因此,可根據服務器的負載來調整這個值,如果非零的話,筆者認為10000左右是比較合適的。事實上這個值對Apache的性能影響不是很大。

MaxClients 是這些指令中最為重要的一個,它設定的就是Apache可以同時處理的請求,這是對Apache性能影響最大的參數.在我個人看來,缺省的150是遠遠不 夠的,如果請求總數已達到這個值(可通過ps –ef|grep httpd|wc –l來確認),那么下面的請求就要排隊,直到某個已處理請求完畢。這就是為什么系統資源還剩下很多,而http訪問卻很慢的主要原因。系統管理員可以根據 硬件配置和負載情況來動態調整這個值,雖然理論上這個值越大,可以處理的請求就越多,但實際上,平時根據咱們用的服務器(比如戴爾2950)配置,這個參 數設置到500已經足夠。注意的是,在Apache1版本中,這個參數是有限制的,不能超過256,即使你設置大於256也不管用,除非更改源代碼重新編 譯。在Apache2.0中新加入了ServerLimit指令,使得無須重編譯Apache就可以加大MaxClients。

所以相對適中的一個配置推薦:

    ServerLimit        2048
    StartServers        10
    MinSpareServers       10
    MaxSpareServers      15
    MaxClients         500
    MaxRequestsPerChild    10000

 

 

 

 

1.

啟用MPM模塊配置文件

我們需要在httpd.conf文件中啟用該配置文件,如下所示:

# Server-pool management (MPM specific)Include conf/extra/httpd-mpm.conf (去掉該行前面的注釋符號"#")

2.

 

啟用MPM模塊后找到配置文件進行編輯。

在Apace安裝目錄/conf/extra目錄中有一個名為httpd-mpm.conf的配置文件。該文件主要用於進行MPM模塊的相關配置。不過,在默認情況下,Apache的MPM模塊配置文件並沒有啟用。

例如:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of connections a server process serves
#                         before terminating
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

3.

 

此時,我們就需要根據當前Apache服務器所使用的MPM模塊,來修改對應<IfModule>節點下的參數配置。首先,我們來看看mpm_winnt模塊下的默認配置:

#由於mpm_winnt模塊只會創建1個子進程,因此這里對單個子進程的參數設置就相當於對整個Apache的參數設置。

<IfModule mpm_winnt_module> 

ThreadsPerChild      150 #推薦設置:小型網站=1000 中型網站=1000~2000 大型網站=2000~3500MaxRequestsPerChild    0 #推薦設置:小=10000 中或大=20000~100000</IfModule>

對應的配置參數作用如下:

 

ThreadsPerChild

每個子進程的最大並發線程數。

MaxRequestsPerChild

每個子進程允許處理的請求總數。如果累計處理的請求數超過該值,該子進程將會結束(然后根據需要確定是否創建新的子進程),該值設為0表示不限制請求總數(子進程永不結束)。

該參數建議設為非零的值,可以帶來以下兩個好處:

可以防止程序中可能存在的內存泄漏無限進行下去,從而耗盡內存。

給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。

 

 

 

 

 

 

注意:在以上涉及到統計請求數量的參數中,對於KeepAlive的連接,只有第一個請求會被計數。

4.

 

我們再來看看mpm_perfork模塊和mpm_worker模塊下的默認配置:

#mpm_perfork模塊

<IfModule mpm_prefork_module> StartServers          5 #推薦設置:小=默認 中=20~50 大=50~100MinSpareServers       5 #推薦設置:與StartServers保持一致MaxSpareServers      10 #推薦設置:小=20 中=30~80 大=80~120 MaxClients          150 #推薦設置:小=500 中=500~1500 大型=1500~3000MaxRequestsPerChild   0 #推薦設置:小=10000 中或大=10000~500000(此外,還需額外設置ServerLimit參數,該參數最好與MaxClients的值保持一致。)</IfModule>

#mpm_worker模塊

<IfModule mpm_worker_module> StartServers          2 #推薦設置:小=默認 中=3~5 大=5~10MaxClients          150 #推薦設置:小=500 中=500~1500 大型=1500~3000MinSpareThreads      25 #推薦設置:小=默認 中=50~100 大=100~200MaxSpareThreads      75 #推薦設置:小=默認 中=80~160 大=200~400 ThreadsPerChild      25 #推薦設置:小=默認 中=50~100 大型=100~200MaxRequestsPerChild   0 #推薦設置:小=10000 中或大=10000~50000(此外,如果MaxClients/ThreadsPerChild大於16,還需額外設置ServerLimit參數,ServerLimit必須大於等於 MaxClients/ThreadsPerChild 的值。)</IfModule>

對應的配置參數作用如下:

 

StartServers

啟動Apache時創建的子進程數。

MinSpareServers

處於空閑狀態的最小子進程數。

所謂空閑子進程是指沒有正在處理請求的子進程。如果當前空閑子進程數少於MinSpareServers,那么Apache將以最大每秒一個的速度產生新的子進程。只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。

 

MaxSpareServers

處於空閑狀態的最大子進程數。

只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。如果你將該指令的值設置為比MinSpareServers小,Apache將會自動將其修改成MinSpareServers+1。

 

MaxClients

允許同時連接的最大請求數量。

任何超過MaxClients限制的請求都將進入等待隊列,直到達到ListenBacklog指令限制的最大值為止。

對於非線程型的MPM(也就是mpm_prefork),MaxClients表示可以用於處理客戶端請求的最大子進程數量,默認值是256。要增大這個值,你必須同時增大ServerLimit。

對於線程型或者混合型的MPM(也就是mpm_beos或mpm_worker),MaxClients表示可以用於處理客戶端請求的最大線程數量。線程型的mpm_beos的默認值是50。對於混合型的MPM默認值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。因此要將MaxClients增加到超過16個進程才能提供的時候,你必須同時增加ServerLimit的值。

 

MinSpareThreads

處於空閑狀態的最小線程數。

不同的MPM對這個指令的處理是不一樣的:

mpm_worker的默認值是75。這個MPM將基於整個服務器監視空閑線程數。如果服務器中總的空閑線程數太少,子進程將產生新的空閑線程。mpm_netware的默認值是10。既然這個MPM只運行單獨一個子進程,此MPM當然亦基於整個服務器監視空閑線程數。mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的默認值是1;mpmt_os2的默認值是5。

 

MaxSpareThreads

處於空閑狀態的最大線程數。

不同的MPM對這個指令的處理是不一樣的:

mpm_worker的默認值是250。這個MPM將基於整個服務器監視空閑線程數。如果服務器中總的空閑線程數太多,子進程將殺死多余的空閑線程。mpm_netware的默認值是100。既然這個MPM只運行單獨一個子進程,此MPM當然亦基於整個服務器監視空閑線程數。mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的默認值是50;mpmt_os2的默認值是10。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM