Windows系統下的Apache效能最佳化-mpm

來源:互聯網
上載者:User
原文連結:http://fanlb.blogbus.com/logs/119081614.html

一般來說,WinNT系統下使用IIS,而Apache在Linux下應用的比較多,但是依然有很多人在WinNT系統下使用Apache而非IIS,可能是基於對Windows系統的熟悉吧。今天就來說一下在Windows系統下如果最佳化Apache的效能。

執行"httpd -l"就看到windows+apache+php的環境檢測apache是載入了哪種mpm模組,這裡載入的是:mpm_winnt.c,所以我們最佳化的時候更改mpm_winnt.c裡面的設定。

mpm_winnt.c 是專門針對Windows NT最佳化的MPM(多路處理模組),它使用一個單獨的父進程產生一個單獨的子進程,在這個子進程中輪流產生多個線程來處理請求。也就是說mpm_winnt只能啟動父子兩個進程, 不能像Linux下那樣同時啟動多個進程。

mpm_winnt主要通過ThreadsPerChild和MaxRequestsPerChild兩個參數來最佳化Apache,下面詳細來說明一下。

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檔案中做如下設定來開啟它:

  1. # 首先需要載入mod_status模組
  2. LoadModule status_module modules/mod_status.so
  3. # 然後設定訪問的地址 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.