NO IMAGE

(1)首選檢視apache的工作模式
windows下的檢視apache的工作模式命令:httpd -l
如果列出mod_win32.c,則表示是 win32.c 工作方式。 列出的全部內容如下所示:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c

mpm_winnt.c是專門針對Windows NT優化的MPM(多路處理模組),它使用一個單獨的父程序產生一個單獨的子程序,在這個子程序中輪流產生多個執行緒來處理請求。也就是說mpm_winnt只能啟動父子兩個程序, 不能像Linux下那樣同時啟動多個程序。
mpm_winnt主要通過ThreadsPerChild和MaxRequestsPerChild兩個引數來優化Apache,下面詳細來說明一下。

(2)mod_win32.c工作模式,對應的優化內容如下
在httpd.conf檔案中,加入以下內容
<IfModule mpm_winnt.c>
   ThreadsPerChild 250
   MaxRequestsPerChild 5000
</IfModule>

ThreadsPerChild
這個引數用於設定每個程序的執行緒數, 子程序在啟動時建立這些執行緒後就不再建立新的執行緒了. 一方面因為mpm_winnt不能啟動多個程序, 所以這個數值要足夠大,以便可以處理可能的請求高峰; 另一方面該引數以伺服器的響應速度為準的, 數目太大的反而會變慢。因此需要綜合均衡一個合理的數值。

mpm_winnt上的預設值是64, 最大值是1920. 這裡建議設定為100-500之間,伺服器效能高的話值大一些,反之值小一些。

MaxRequestsPerChild
該參數列示每個子程序能夠處理的最大請求數, 即同時間內子程序數目.設定為零表示不限制, mpm_winnt上的預設值就是0.
官方參考手冊中不建議設定為0, 主要基於兩點考慮:
(1) 可以防止(偶然的)記憶體洩漏無限進行,從而耗盡記憶體;
(2) 給程序一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動程序的數量。

這個引數的值更大程度上取決於伺服器的記憶體,如果記憶體比較大的話可以設定為0或很大的數字,否則設定一個小的數值。需要說明的是,如果這個值設定的太小的話會造成Apache頻繁重啟,在日誌檔案中會看到如下的文字:
Process exiting because it reached MaxRequestsPerChild. Signaling the parent

這樣一來降低了Apache的總體效能。

另外,可以通過檢視Apache提供的server-status(狀態報告)來驗證當前所設定數值是否合理,在httpd.conf檔案中做如下設定來開啟它:

    * # 首先需要載入mod_status模組
     LoadModule status_module modules/mod_status.so
    * # 然後設定訪問的地址
     <Location /server-status>
         SetHandler server-status
         Order deny,allow
         Deny from all
         # 如果限制某個IP訪問則設定為 Allow from 192.168.0.1
         Allow from all
     </Location>

開啟以下地址:http://localhost/server-status,檢視apache的執行情況!