ab壓力測是工具
- Apache自帶壓力測試工具ab,簡單易用,且能夠模擬各類條件對web服務器發起測是請求
- ab工具能夠直接在web服務器本地發起測是請求,這對於須要瞭解服務器的處理性能相當重要,由於它不包括數據的網絡傳輸時間以及用戶pc本地的計算時間,從而能夠經過觀測各類時間指標判斷web服務器的性能,以便進行參數的優化調整
在進行性能調整優化過程當中,可用ab壓力測是工具進行優化效果的測試
- 優化前先使用ab進行壓力測試
- 優化後,重啓服務,再使用ab進行壓力測試
- 對比兩次測試的結果,看優化效果是否明顯
- 爲了能更客觀的評價web服務的性能,通常優化先後都要進行屢次測試,取測試的平均值進行對比
ab工具使用
命令格式:
ab[options] 網站網址
參數說明:
-n,-c,-t,-v
示例:
/usr/local/httpd/bin/ab -n5000 -c900 www.kgc.com/index.html
在測試時要根據狀況調整求總數與併發用戶數
ab測試結果關鍵參數說明
參數 |
描述 |
Server Software |
http響應數據的頭信息 |
Server Hostname |
請求的url中的主機名稱 |
Server Port |
web服務器軟件的監聽端口 |
Document Path |
請求的url根的絕對路徑 |
Document Length |
http響應數據的正文長度 |
Concurrency Level |
併發的用戶數 |
Time taken for tests |
全部這些請求被處理完成所花費的時間總和 |
Complete requests |
表示總請求數 |
Failed requests |
失敗的請求總數 |
Total transferred |
請求的響應數據長度總和 |
Requests per second |
服務器的吞吐率,每秒處理的請求數 |
Time per request |
用戶平均請求等待時間 |
Time per request |
每一個請求實際運行時間的平均值 |
Percentage of the requests served within a certain time (ms) |
描述每一個請求處理時間的分佈狀況 |
Apache工做模式介紹
- Apache做爲現今web服務器用的最普遍也是最穩定的開源服務器軟件
- 其工做模式有許多種,源碼包安裝httpd時刻查看httpd-mpm-conf文件,該文件位於extra/conf目錄中
- 目前主要有兩種模式:
event模式
prefork模式
worker模式
可以使用./httpd -l查看apache當前工做模式
event工做模式介紹
- event是Apache最新的工做模式,它和worker模式很像,不一樣的是在於它解決了keep-alive長鏈接的時候佔用線程資源被浪費的問題
- event工做模式在遇到某些不兼容的模塊時,會失效,將會回退到worker模式
- event工做模式須要Linux系統(Linux 2.6+)對epoll的支持,才能啓用。須要補充的是HTTPS的鏈接(SSL)
event工做方式
- 在event工做模式中,會有一些專門的線程用來管理這些keep-alive類型的線程
- 當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢後,又容許它釋放
- 這樣,一個線程就能處理幾個請求了,實現了異步非阻塞。這加強了在高併發場景下的請求處理
event參數講解
## 在http-mpm.conf配置文件中,如下是event模塊的定義
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
參數說明
參數 |
說明 |
StartServers |
服務啓動時初始的進程數,默認3 |
MinSpareThreads |
最小的空閒子進程數,默認75 |
MaxSpareThreads |
最大的空閒子進程數,默認250 |
ThreadsPerChild |
每一個子進程產生的線程數量,默認是25 |
MaxRequestWorkers |
限定同一時間內客戶端最大接入請求數量,默認400 |
MaxConnectionsPerChild |
每一個子進程在其生命週期內容許的請求數量,若是請求總數已經達到這個數值,子進程將會結束,若是設置爲0,子進程將永遠不會結束。將該值設置爲非0值,能夠防止運行PHP致使的內存泄露 |
event優化建議
可根據生產環境進行調試,以肯定合適參數html
##優化參考
<IfModule mpm event module>
ServerLimit 1000
StartServers 20
MinSpareThreads 25
MaxSpareThreads 1200
ThreadsPerChild 50
MaxRequestWorkers 2000
MaxC onnectionsPerChild 1000
</IfModule>
prefork工做模式介紹
- prefork是一個多路處理模塊(MPM),實現了一個進程型的,預派生的web服務器,適合於沒有線程安全庫,須要避免線程兼容性問題的系統
- 在要求每一個請求相互獨立的狀況下具備很好的特性,若一個請求出現問題不會影響到其餘請求
- 具備很強的自我調節能力,只須要很好的配置指令進行調整就能夠適合於企業應用要求
- 最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以免所需的內存超出物理內存的大小
- 一個單獨的控制進程(父進程)負責產生子進程,子進程用於監聽請求並做出應答,所以在內存中會一直存在一些備用的(spare)或是空閒的子進程用於響應新的請求,可加快響應速度
- 父進程一般以root身份進行,以便綁定80端口,子進程一般以一個低特權的用戶運行,可經過配置項的User和Group配置
- 運行子進程的用戶必需要對網站內容有讀取權限,可是對其餘資源必須擁有儘量少的權限,以保證系統安全
- 編譯安裝時沒有指定工做模式,默認會使用prefork模式,可用httpd -l查看
prefork參數講解
##在httpd-mpm.conf配置文件中,如下是prefork模塊的定義
<IfModule mpm_ prefork module>
StartServers 20
MinSpareServers 10
MaxSpareServers 50
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
參數 |
說明 |
ServerLimit |
最大進程數 |
StartServers |
啓動的時候建立的進程數量 |
MinSpareServers |
最少空閒進程 |
MaxSpareServers |
最多空閒進程 |
MaxClients |
最多建立多少個子進程用來處理請求 |
MaxRequestsPerChild |
每一個進程處理的最大請求數,達到請求數,進程即被銷燬,若是設置爲0,子進程永遠不會結束 |
prefork優化建議
可根據生產環境進行調試,以肯定合適參數web
##優化參考
<IfModule mpm prefork module>
ServerLimit 1000
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxClients 1000
MaxRequestsPerChild 5000
</IfModule>
worker工做模式介紹
- worker也是多路處理模塊(MPM),使網路服務支持混合的多線程進程
- 因爲使用線程來處理請求,全部能夠處理海量請求,而系統資源的開銷小於基於進程的MPM
- 可是也使用了多進程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性
- 控制該MPM的最重要的指令是:控制每一個子進程容許創建的線程數ThreadsPerChild指令和控制容許創建的總線程數的MaxClients指令
worker工做方式
- 每一個進程可以擁有的線程數量是固定的,服務器會根據負載狀況增長或減小進程數量
- 一個單獨的控制進程(父進程)負責子進程的創建,每一個子進程可以創建ThreadsPerChild數量的服務線程和一個監聽線程,監聽線程監聽接入請求並將其傳遞給服務器進程處理和應答
- Apache老是會維持一個備用(spare)或是空閒的服務器線程池,客戶端無需等待新線程或新進程的創建便可獲得服務
- 父進程通常都是以root身份啓動,以綁定80端口;隨後,Apache以較低權限的用戶創建子進程和線程
- User和Group指令用於配置Apache子進程的運行用戶。子進程要對網頁內容擁有讀取權限,但應該儘量限制權限
worker參數講解
參數 |
說明 |
ServerLimit |
最大進程數,默認值16「」 |
ThreadL imit |
每一個子進程的最大線程數,默認值是"64」 |
StartServers |
服務器啓動時創建的子進程數,默認值是"3" |
MaxClients |
容許同時接受的最大接入請求數量(最大線程數量) |
MinSpare Threads |
最小空閒線程數,,默認值是"75" |
MaxSpare Threads |
設置最大空閒線程數。默認值是"250" |
ThreadsPerChild |
每一個子進程創建的常駐的執行線程數。默認值是25 |
MaxRequestsPerChild |
設置每一個子進程在其生存期內容許伺服的最大請求數量。設置爲"0",子進程將永遠不會結束 |
實例(prefork爲例)
[root@localhost httpd-2.4.29]#./configure \
--with-mpm=prefork \ ##添加工做模式此配置項
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
輸入/mpm查找此關鍵詞,將前面的#註釋刪除
Include conf/extra/httpd-mpm.conf ##定位到這行將註釋刪除,啓用功能
[root@localhost ~]# cd /usr/local/httpd/conf/extra/
[root@localhost extra]# vim httpd-mpm.conf
<IfModule mpm_prefork_module>
StartServers 10 ##啓動的時候建立的進程數量改成10
MinSpareServers 10 ##空閒最小改成10
MaxSpareServers 20 ##最大設爲20
MaxRequestWorkers 200 ##訪問設量爲200
MaxConnectionsPerChild 0
</IfModule>
##修改完成按Esc退出插入模式,輸入:wq保存退出
[root@localhost extra]# cd ../../bin/
[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start
##從新關閉開啓服務
[root@localhost bin]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 58933 root 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58937 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58938 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58939 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58940 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58941 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58942 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58943 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58944 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58945 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
httpd 58946 daemon 3u IPv4 88357 0t0 TCP localhost.localdomain:http (LISTEN)
##除去一個主進程,其餘的子進程變爲10個
Apache目錄屬性
- 目錄的權限設置使用<Directory 目錄路徑>和</Directory>這對語句爲主目錄或虛擬目錄設置權限
- 它們是一對容器語句,必須成對出現,它們之間封裝的是具體的設置目錄權限語句,這些語句僅對被設置目錄及其子目錄起做用
目錄屬性參數
參數 |
做用 |
Options |
設置在特定目錄使用哪些特性 |
AllowOverride |
容許存在於.htaccess文件中的指令類型 |
Require |
設置目錄的訪問控制 |
Indexes |
當用戶訪問該目錄時,但沒有指定要訪問哪一個文件,並且目錄下不存在默認網頁時,返回目錄中的文件和子目錄列表 |
MultiViews |
內容協商的多重視圖,Apache的一個智能特性。 當訪問目錄中不存在的對象時 |
ExecCGI |
容許在該目錄下執行CGI腳本 |
FollowSymLinks |
在該目錄下容許文件系統使用符號鏈接 |
Includes |
容許服務器端包含功能 |
IncludesNoExec |
容許服務器端包含功能,但禁止執行CGI腳本 |
All |
包含除了MultiViews以外全部特性,若是沒有Options語句,默認爲All |
實例(修改配置文件開啓目錄屬性)
[root@localhost bin]# vim /etc/httpd.conf
//輸入/htdocs查找此關鍵詞,找到以下字段,其中有兩個功能起到支持做用:
DocumentRoot "/usr/local/httpd/htdocs"
<Directory "/usr/local/httpd/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
//1.Index:以列表形式展示
//2.FollowSymLinks而且支持連接性的文件
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted //黑白名單
</Directory>
#咱們能夠先關閉防火牆,使用宿主機的瀏覽器進行驗證
[root@localhost bin]# systemctl stop firewalld.service
[root@localhost bin]# setenforce 0
[root@localhost bin]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# cat index.html
<html><body><h1>It works!</h1></body></html>
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# mv index.html a.html
[root@localhost htdocs]# ls
a.html
[root@localhost htdocs]# touch b.html c.html d.html
[root@localhost htdocs]# ls
a.html b.html c.html d.html
//此時會以文件列表的形式展示,從另外一個角度咱們能夠利用這點來作文件下載資源的提供,此時就不須要首頁識別
鏈接文件放到站點中
[root@localhost htdocs]# ln -s /usr/share/man/ ./
//把man手冊放入這個文件夾,看他能不能識別這個連接文件
[root@localhost htdocs]# ls
a.html b.html c.html d.html man
謝謝閱讀!!!