Apache網頁深刻優化——ab壓力測試,工做模式

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
//此時會以文件列表的形式展示,從另外一個角度咱們能夠利用這點來作文件下載資源的提供,此時就不須要首頁識別

Apache網頁深刻優化——ab壓力測試,工做模式

鏈接文件放到站點中

[root@localhost htdocs]# ln -s /usr/share/man/ ./       
//把man手冊放入這個文件夾,看他能不能識別這個連接文件
[root@localhost htdocs]# ls
a.html  b.html  c.html  d.html  man

Apache網頁深刻優化——ab壓力測試,工做模式

謝謝閱讀!!!

相關文章
相關標籤/搜索