博客 / 詳情

返回

基於飛騰騰雲S2500的Apache部署及調優指南

【寫在前面】飛騰開發者平台是基於飛騰自身強大的技術基礎和開放能力,聚合行業內優秀資源而打造的。該平台覆蓋了操作系統、算法、數據庫、安全、平台工具、虛擬化、存儲、網絡、固件等多個前沿技術領域,包含了應用使能套件、軟件倉庫、軟件支持、軟件適配認證四大板塊,旨在共享尖端技術,為開發者提供一個涵蓋多領域的開發平台和工具套件。點擊這裏開始你的技術升級之旅吧

image.png

本文分享至飛騰開發者平台《基於飛騰騰雲S2500的Apache部署及調優指南》

1 軟件介紹

Apache HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由於其多平台和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠並且可通過簡單的API擴展,將Perl/
Python等解釋器編譯到服務器中。

Apache源於NCSA httpd服務器,經過多次修改,成為世界上最流行的Web服務器軟件之一。Apache Web服務器擁有以下特性:

1)支持最新的HTTP/1.1通信協議

2)擁有簡單而強有力的基於文件的配置過程

3)支持通用網關接口

4)支持基於IP和基於域名的虛擬主機

5)支持多種方式的HTTP認證

6)集成Perl處理模塊

7)集成代理服務器模塊

8)支持實時監視服務器狀態和定製服務器日誌

9)支持服務器端包含指令(SSI)

10)支持安全Socket層(SSL)

11)提供用户會話過程的跟蹤

12)支持FastCGI

13)通過第三方模塊可以支持JavaServlets

(引用自https://baike.baidu.com/item/Apache/6265?fr=aladdin)

2 環境要求

2.1 硬件配置

用途 型號
網絡服務器 飛騰騰雲S2500處理器服務器
客户端 飛騰騰雲S2500處理器服務器

2.2 軟件版本

軟件名 對應版本
httpd 2.4.49
LuaJIT 2.1
apr 1.7.0
apr-util 1.6.1
pcre 8.45

3 應用部署

下面將詳細介紹Web應用Apache的搭建步驟,並對其性能進行驗證,主要包括如下步驟:

第一步,獲取源碼;

第二步,編譯安裝apr;

第三步,編譯安裝apr-util;

第四步,編譯安裝pcre;

第五步,編譯安裝httpd;

第六步,配置httpd端口;

第七步,運行驗證。在運行驗證時,通過網絡服務器啓動Apache服務,在客户端使用ab工具進行性能測試,一般地,模擬200用户共同發起20萬次網絡請求,之後,獲取TPS(Requests per second)值。需要注意的是,網絡服務器和客户端都需要部署Apache環境。

4 應用調優

4.1 調優目的

通過調整Apache配置文件來有效地提高Web應用性能。

4.2 調優方法

4.2.1 物理綁核

使用taskset對apache進程進行綁核,防止進程跨路;操作如下:

 taskset -c 0-63 /usr/local/httpd-2.4.49/bin/apachectl start 

4.2.2 優化httpd.conf

修改配置文件httpd.conf內容,主要包括:

1、啓動壓縮;

2、啓用重寫;

3、提供文件描述符緩存支持;

4、啓用基於URL鍵的內容動態緩衝(內存或磁盤);

5、啓用基於磁盤的緩衝管理器;

6、基於內存的緩衝管理器;

7、屏蔽所有不必要的模塊;

8、啓動靜態文件緩存;

9、允許apache修改或清除傳遞到cgi或ssi頁面的環境變量;

10、禁止根據客户端請求頭字段設置環境變量;

11、禁止生成描述服務器狀態的頁面;

12、啓用過濾(使用緩存必須啓用過濾模塊)。

4.2.3 配置mpm模式

Apache提供了多處理模塊(MPM),用來綁定到網絡端口上,接受請求以及調度子進程處理請求。

模塊名 説明
Prefork 在啓動時會預派生多個子進程,每個子進程只有一個線程。不需要擔心線程安全問題,但是每個進程都佔用系統資源,在處理高併發請求的場景中,會消耗大量的系統資源。
Worker 每個子進程能生成更多的線程,每個線程都能處理請求。減少了子進程數以及內存使用量,提升了服務器的併發能力,但安全性低,不能與不是線程安全的模塊一起使用。
Event 基於Worker模塊,但它解決了 keep-alive 場景下,長期被佔用的線程的資源浪費問題。Event模塊會有一個專門的線程管理keep-alive 類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又允許它釋放。這樣一個線程就能處理幾個請求,實現異步非阻塞。

MPM模塊的加載方式是在httpd.conf中添加下列內容(三者任選其一):

LoadModule mpm_event_module modules/mod_mpm_event.so 

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

#LoadModule mpm_worker_module modules/mod_mpm_worker.so

如果需要調整MPM模塊進程細節,則需要在httpd.conf中啓用MPM模塊配置文件:

Include conf/extra/httpd-mpm.conf

詳細的MPM模塊配置文件是httpd-mpm.conf,文件中包含以下內容:

Prefork MPM模塊

默認配置:

<IfModule mpm_prefork_module>   
    StartServers            5   
    MinSpareServers         5   
    MaxSpareServers         10   
    MaxRequestWorkers       250   
    MaxConnectionsPerChild  0 
</IfModule> 

其中StartServers代表初始化預派生的子進程數,MinSpareServers代表最小空閒子進程數,MaxSpareServers代表最大空閒子進程數,MaxRequestWorker代表最大請求數(因為在Prefork MPM模塊中一個請求數對應一個子進程,故也可以理解為最大派生子進程數),MaxConnectionsPerChild代表每個進程可處理的請求數(達到目標值後該進程將被殺死,0代表沒有限制)。

Worker MPM模塊

加載方式為在httpd.conf中添加下列內容:

LoadModule mpm_worker_module modules/mod_mpm_worker.so

默認配置:

<IfModule mpm_worker_module>   
    StartServers        3   
    MinSpareThreads     75   
    MaxSpareThreads    250   
    ThreadsPerChild      25   
    MaxRequestWorkers   400   
    MaxConnectionsPerChild  0 
</IfModule>

其中StartServer代表初始化預派生的子進程數,另外可以使用ServerLimit來指定最大進程數(默認為16)。MinSpareThr eads代表最小空閒線程數,MaxSpareThreads代表最大空閒線程數,ThreadsPerChild代表每個子進程可創建的線程數,MaxRequestWorkers代表最大請求數(因為在Worker MPM模塊中,一個請求數對應一個線程,故也可以理解為最大線程數。理論上,最大線程數不能超過最大進程數與每個進程可創建的線程數的乘積),MaxConnectionsPerChild代表每個進程可處理的請求數(達到目標值後該進程將被殺死,0代表沒有限制)。

Event MPM模塊

加載方式為在httpd.conf中添加下列內容:

LoadModule mpm_event_module modules/mod_mpm_event.so

默認配置:

<IfModule mpm_event_module>   
    StartServers            3   
    MinSpareThreads         75   
    MaxSpareThreads            250   
    ThreadsPerChild          25   
    MaxRequestWorkers       400   
    MaxConnectionsPerChild  0 
</IfModule>

參數作用與Worker MPM模塊一致。

4.3 調優示例

示例環境為一台飛騰騰雲S2500處理器服務器與一台英特爾X86服務器,Apache同時部署在兩台服務器上,飛騰騰雲S2500處理器服務器作為Apache服務器,X86服務器作為客户端模擬200用户發起20萬次網絡請求,模擬100次後取TPS算平均值。由於Event是明顯優於Worker的,所以優先選擇Event模式,其初始配置如下:

初始進程數:3
最大進程數:16
最小空閒線程數:75
最大空閒線程數:400
每進程可創建線程數:25
最大線程數:400

下表中的調優記錄均為Event模式下測出,且都基於上述配置進行修改。

序號 吞吐量 調優措施
1 62722 初始配置
2 57165 最大進程數:16-\>8,最大線程數:400-\>200
3 30372 最大進程數:16-\>4,最大線程數:400-\>100
4 61362 最大進程數:16-\>24,最大線程數:400-\>600
5 64477 最大進程數:16-\>40,每進程可創建線程數:25-\>10
6 58884 最大進程數:16-\>10,每進程可創建線程數:25-\>40
7 63783 最大進程數:16-\>80,每進程可創建線程數:25-\>5
8 98785 綁核0-63

二次測試以確認調優效果(測試前充分預熱可讓數值整體提升,預熱操作為用ab壓測十次)。

序號 吞吐量 調優措施
1 66403 初始配置
2 66818 最大進程數:16-\>24,最大線程數:400-\>600
3 69565 最大進程數:16-\>40,每進程可創建線程數:25-\>10
4 65990 最大進程數:16-\>10,每進程可創建線程數:25-\>40
5 68302 最大進程數:16-\>80,每進程可創建線程數:25-\>5
6 103228 綁核0-63

由上表可知,通過綁核以及調整進程數與線程數的搭配可以提升Apache的性能。在飛騰騰雲S2500處理器服務器上,通過設置最大進程數為40,每進程可創建線程數為10且將apache進程綁核0-63可達到最佳性能。

5 常見問題

1)apr-util編譯報錯

如果報錯內容如下圖所示:

image.png

則通過安裝expat-devel包可以解決。

2)修改Apache配置後不生效

部分Apache配置修改後需要關閉Apache服務再啓動,直接重啓服務不生效。

# /usr/local/httpd-2.4.49/bin/apachectl stop && sleep 4 && /usr/local/httpd-2.4.49/bin/apachectl start 

6 附錄

6.1 示例腳本

預熱:

# for i in {1..10};do ab -c 200 -n 200000 -k http://10.31.72.37:80/index.html;sleep 2;done

壓測:

# rm -f ave.log;for l in {1..20};do rm -f tmp.log;for i in {1..5};do ab -c 200 -n 200000 -k http://10.31.72.37:80/index.html\|grep "Requests per second" \>\> tmp.log;sleep 1;done ;cat tmp.log\|awk -F" " 'BEGIN{sum=0} {sum=sum+\$4} END{print sum/5}' \>\> ave.log;done;cat ave.log \|awk 'BEGIN{sum=0} {sum=sum+\$1} END{print sum/20}'


歡迎廣大開發者來飛騰開發者平台獲取更多前沿技術文檔及資料

如開發者在使用飛騰產品有任何問題可通過在線工單聯繫我們



版權所有。飛騰信息技術有限公司 2023。保留所有權利。

未經本公司同意,任何單位、公司或個人不得擅自複製,翻譯,摘抄本文檔內容的部分或全部,不得以任何方式或途徑進行傳播和宣傳。

商標聲明

Phytium和其他飛騰商標均為飛騰信息技術有限公司的商標。

本文檔提及的其他所有商標或註冊商標,由各自的所有人擁有。

注意

本文檔的內容視為飛騰的保密信息,您應當嚴格遵守保密任務;未經飛騰事先書面同意,您不得向任何第三方披露本文檔內容或提供給任何第三方使用。

由於產品版本升級或其他原因,本文檔內容會不定期進行更新。除非另有約定,本文檔僅作為使用指導,飛騰在現有技術的基礎上盡最大努力提供相應的介紹及操作指引,但飛騰在此明確聲明對本文檔內容的準確性、完整性、適用性、可靠性的等不作任何明示或暗示的保證。

本文檔中所有內容,包括但不限於圖片、架構設計、頁面佈局、文字描述,均由飛騰和/或其關聯公司依法擁有其知識產權,包括但不限於商標權、專利權、著作權等。非經飛騰和/或其關聯公司書面同意,任何人不得擅自使用、修改,複製上述內容。

user avatar elastic_computing 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.