1. 程式人生 > >Apache調優三個方面

Apache調優三個方面

Apache調優:01、硬體與作業系統方面,02、執行時的配置,03、編譯時的配置

**********************硬體與作業系統方面**********************
影響WEB伺服器效能的最大因素是記憶體,儘可以不使用交換機制,主要是交換產生滯後使使用者感覺"不夠快"
,導致使用者不停去點停止和重新整理對web伺服器產生更大負載;


另一獲取最新最穩定的版本,改善效能的TCP協議和執行緒庫
另二作業系統支援sendfile()呼叫,務必安裝帶有些功能的版本或補丁,更快傳送靜態內容且佔用較少的CPU時間

**********************執行時的配置**********************
1、AllowOverride:All->空間允許覆蓋,試圖對檔名每一個組成部分都開啟.htaccess
                     None->不允許,建議檔案系統中所有地方都使用AllowOverride None

2、HostnameLookups:預設設定為On,會產生延遲是因為每個一請求都需要作一個DNS查詢

                                  設定Off即不會"
FollowSymLinks 和 SymLinksIfOwnerMatch:如使用SymLinksIfOwnerMatch,Apache就必須執行額外的系統呼叫以驗證符號連線的安全性
                                                                 如使用SymLinksIfOwnerMatch即執行驗證符號連線的安全性
DocumentRoot /www/htdocs
<Directory />
Options SymLinksIfOwnerMatch
</Directory>


如下可以減下多餘的路徑進行驗證符號連線的安全性,/根目不驗證,而對/www/htdocs目下進行驗證符號連線的安全性,如需要更多的路徑可重複設定
<Directory />
Options Options FollowSymLinks
</Directory>
<Directory /www/htdocs>
Options -FollowSymLinks +SymLinksIfOwnerMatch
</Directory>

3、內容協商:MultiViews效果,如服務收到對/some/dir/foo請求,而該目當下的檔案並不存在,則伺服器會查詢這個目錄下所有的foo.*檔案,並有效地偽造一個說明這些foo.*檔案的型別表,分配給相同的媒體型別及內容編碼,選擇其中最合適的匹配返回客戶;
***如內容協商還需要提升效能,則不要使用萬用字元即可,最常用地放到最前面***

萬用字元 DirctoryIndex index.*
不使用萬用字元 DirctoryIndex index.php,index.html,index.cgi

EnableMMAP:如記憶體對映(增加CPU、對NFS裝載的檔案系統的一個檔案對行了記憶體對映,而另一個NFS客戶端進行程刪除或截斷時,需要使用EnableMMAP off關閉對傳送檔案的記憶體對映;
EnableSendfile:如Apache編譯系統檢測不到有缺陷的sendfile支援,或一個NFS檔案系統的核心無法可靠地通過自己的Cache服務於網路檔案時,需要使用EnableSendfile off來禁用sendfile可以被針對目錄的設定覆蓋;


**********************編譯時的配置**********************

A、啟用MPM模組配置檔案,需要在httpd.conf檔案中啟用該配置檔案,如下所示(去掉該行前面的註釋符號"#")

# Server-pool management (MPM specific)

# Include conf/extra/httpd-mpm.conf

B、確定當前的apache是什麼MPM模式(winnt模式,perfork模式,worker模式)
進入到apache/bin目錄
cmd命令:httpd.exe -L


1、MPM配置 - preforkMPM,一個程序只處理一個連結,速度快,但需要更多的記憶體
workerMPM,一個程序包含多個執行緒,每個執行緒處理一個請求,但需要更少的記憶體,且具有伸縮性
2、模組 - 儘量去除不需要的模組(註釋不需要的相關模組LoadModule)
3、原子操作 - 使用APR的原子API,提供能夠用於輕量級執行緒同步的原子操作
4、mod_status - 監控apache效能,同時開啟ExtendedStatus On,這樣Apache會對請求調兩次gettimeofday(),為得到最佳效能,可以設定 ExtendedStatus Off

5、多socket情況下的序列accept

6、單socket情況下的序列accept

7、Scoreboard檔案

--------------------------各模式詳解------------------------------

MPM_winnt模式
<IfModule mpm_winnt_module>
ThreadsPerChild      150  //修改這個值即可,子程序最大執行緒數
MaxRequestsPerChild    0  //子執行緒數允許處理的請求總數,防止記憶體洩漏無限進行,從而耗盡記憶體;給一定限值有助於伺服器負載減輕
</IfModule>


MPM_worker模式
<IfModule mpm_worker_module>
    StartServers          2  //預先起2個程序
    MaxClients          150  //併發連線數
    MinSpareThreads      25  //最小空閒程序
    MaxSpareThreads      75  //最大空閒程序
    ThreadsPerChild      25  //修改這個值即可,子程序最大執行緒數
    MaxRequestsPerChild   0  //子執行緒數允許處理的請求總數
</IfModule>




MPM_profork模式
<IfModule mpm_prefork_module>
StartServers          5        //預先起5個程序
MinSpareServers       5       //最小空閒程序
MaxSpareServers      10      //最大空閒程序
MaxClients          150      //併發連線數
MaxRequestsPerChild   0      //子執行緒數允許處理的請求總數
</IfModule>


給大家一個合理的建議配置,對在部分網站,中型網站,配置:
<IfModule mpm_prefork_module>
StartServers          5        //預先起5個程序
MinSpareServers       5       //最小空閒程序
MaxSpareServers      10      //最大空閒程序
ServerLimit          1500     // 用於修改apache程式設計引數
MaxClients          1000      //併發連線數
MaxRequestsPerChild   0      //子執行緒數允許處理的請求總數
</IfModule>


如果你的網站pv值百萬,可以這樣設定:
ServerLimit          2500     // 用於修改apache程式設計引數
MaxClients          2000      //併發連線數 MacClients = (RAM-size_all_other_processes)/(size_apache_process)