1. 程式人生 > >優化Apache,提高併發

優化Apache,提高併發

  • 模擬併發訪問
ab -n 100000 -c 1000 -k http://weibo.cnsuning.com/index.php
  • 檢測 HTTPD 連線數:
watch -n 1 -d “pgrep httpd|wc -l”
  • 確定工作模式 prefork / worker
httpd -l
  • 併發引數設定

prefork 的工作原理是,控制程序在最初建立”StartServers”個子程序後,為了滿足”MinSpareServers”設定的需要建立一個程序,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個……如此按指數級增加建立的程序數,最多達到每秒 32 個,直到滿足 MinSpareServers 設定的值為止。 這就是預派生(prefork)的由來。這種模式可以不必在請求到來時再產生新的程序,從而減小了系統開銷以增加效能。

MaxSpareServers 設定了最大的空閒程序數,如果空閒程序數大於這個值,apache 會自動 kill 掉一些多餘程序。

這個值不要設得過大,但如果設的值比 MinSpareServers 小,apache 會自動把其調整為 MinSpareServers+ 1。

如果站點負載較大,可考慮同時加大 MinSpareServers 和 MaxSpareServers。

MaxRequestsPerChild 設定的是每個子程序可處理的請求數。每個子程序在處理了”MaxRequestsPerChild” 個請求後將自動銷燬。

0 意味著無限,即子程序永不銷燬。雖然預設設為 0 可以使每個子程序處理更多的請求,但如果設成非零值也有兩點重要的好處: 可防止意外的記憶體洩漏;在伺服器負載下降的時侯會自動減少子程序數。 因此,可根據伺服器的負載來調整這個值。但也不能太小,不然系統不斷的開啟新的 apache 程序,造成資源浪費。

MaxClients 是這些指令中最為重要的一個,設定的是 apache 可以同時處理的請求,是對 apache 效能影響最大的引數。

其預設值 150 是遠遠不夠的,如果請求總數已達到這個值(可通過 ps -ef|grep http|wc -l 來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。 這就是系統資源還剩下很多而 http 訪問卻很慢的主要原因。

  • 其它引數設定

    • ServerTokens Prod – 隱藏伺服器版本資訊,只顯示 apache
    • ServerSignature Off
    • HostnameLookups Off
    • Timeout 5 – 請求超時時間
    • KeepAlive On
    • KeepAliveTimeout 5
    • MaxKeepAliveRequests 100
  • 關閉不需要的模組

註釋掉載入該模組,及相關配置項