下面討論以下預設沒有安裝的幾個重要的模組。 。 (除了prefork)
常用的模組:
最常用的可能就是php和JAVA應用伺服器的前端,我們目前應用不需要。此外,從效能上講利用mod_gzip可以減少40%左右的流量,減少機器用於傳輸的負載,建議使用。我們使用的檔案比較小,可以看看壓縮演算法的時間開銷和 傳輸的負載的減少是不是合算。 而 mod_expires可以減少10%左右的重複請求,讓重複的使用者對指定的頁面請求結果都CACHE在本地,根本不向伺服器發出請求。但是我們使用的是記憶體檔案系統,關於cache的最佳化可以完全不考慮。
基於反相代理的WEB加速:
squid和mod_proxy都可以實現反相代理加速。而基於快取的代理加速比起原有WEB服務,速度會有數量級的提升。同樣記憶體檔案系統不需要。
影響效能的關鍵指標MPM:
MPM(Multi-Processing Modules,多道處理模組)。 MPM看起來和其它Apache模組非常類似。與其他類型模組不同的是,Apache必須有一個且只有一個MPM處在運作中。 。 指定MPM的方法
$ ./configure --help|grep mpm
顯示如下:
--with-mpm=MPM
Choose the process model for Apache to use.
Choose the process model for Apache to use.
Choose the process model for Apache to use.
prefork|mpmt_os2| perchild|leader|threadpool}
Beos、mpmt_os2分別是BeOS和OS/2上缺省的MPM,perchild主要設計目的是以不同的使用者和群組的身份來運行不同的子進程。這在執行多個需要CGI的虛擬主機時特別有用,會比1.3版中的SuExec機製做得更好。 leader和threadpool都是基於worker的變體,還處於實驗性階段,某些情況下並不會按照預期設想的那樣工作,所以Apache官方也並不推薦使用。因此,我們主要闡述prefork和worker這兩種和效能關係最大的產品級MPM 。
如果不用「--with-mpm」明確指定某種MPM,prefork就是Unix平台上缺省的MPM。
prefork本身並沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的MPM之一。
prefork的工作原理是,控制進程在最初建立「StartServers」個子進程後,為了滿足MinSpareServers設定的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此以指數級增加所建立的進程數,最多達到每秒32個,直到滿足MinSpareServers設定的值為止。這就是預派生(prefork)的由來。這種模式可以不必在請求到來時再產生新的進程,從而減少了系統開銷以增加效能。