溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Apache網(wǎng)頁深入優(yōu)化——ab壓力測(cè)試,工作模式

發(fā)布時(shí)間:2020-08-01 18:40:25 來源:網(wǎng)絡(luò) 閱讀:3037 作者:一拳超人007 欄目:系統(tǒng)運(yùn)維

ab壓力測(cè)是工具

  • Apache自帶壓力測(cè)試工具ab,簡(jiǎn)單易用,且可以模擬各種條件對(duì)web服務(wù)器發(fā)起測(cè)是請(qǐng)求
  • ab工具可以直接在web服務(wù)器本地發(fā)起測(cè)是請(qǐng)求,這對(duì)于需要了解服務(wù)器的處理性能至關(guān)重要,因?yàn)樗话〝?shù)據(jù)的網(wǎng)絡(luò)傳輸時(shí)間以及用戶pc本地的計(jì)算時(shí)間,從而可以通過觀測(cè)各種時(shí)間指標(biāo)判斷web服務(wù)器的性能,以便進(jìn)行參數(shù)的優(yōu)化調(diào)整

在進(jìn)行性能調(diào)整優(yōu)化過程中,可用ab壓力測(cè)是工具進(jìn)行優(yōu)化效果的測(cè)試

  • 優(yōu)化前先使用ab進(jìn)行壓力測(cè)試
  • 優(yōu)化后,重啟服務(wù),再使用ab進(jìn)行壓力測(cè)試
  • 對(duì)比兩次測(cè)試的結(jié)果,看優(yōu)化效果是否明顯
  • 為了能更客觀的評(píng)價(jià)web服務(wù)的性能,一般優(yōu)化前后都要進(jìn)行多次測(cè)試,取測(cè)試的平均值進(jìn)行對(duì)比

ab工具使用

命令格式:
ab[options]  網(wǎng)站網(wǎng)址
參數(shù)說明:
-n,-c,-t,-v
示例:
/usr/local/httpd/bin/ab -n5000 -c900 www.kgc.com/index.html
在測(cè)試時(shí)要根據(jù)情況調(diào)整求總數(shù)與并發(fā)用戶數(shù)

ab測(cè)試結(jié)果關(guān)鍵參數(shù)說明

參數(shù) 描述
?Server Software ???????????? http響應(yīng)數(shù)據(jù)的頭信息
Server Hostname 請(qǐng)求的url中的主機(jī)名稱
Server Port web服務(wù)器軟件的監(jiān)聽端口
Document Path 請(qǐng)求的url根的絕對(duì)路徑
Document Length http響應(yīng)數(shù)據(jù)的正文長(zhǎng)度
Concurrency Level 并發(fā)的用戶數(shù)
Time taken for tests 所有這些請(qǐng)求被處理完成所花費(fèi)的時(shí)間總和
Complete requests 表示總請(qǐng)求數(shù)
Failed requests 失敗的請(qǐng)求總數(shù)
Total transferred 請(qǐng)求的響應(yīng)數(shù)據(jù)長(zhǎng)度總和
Requests per second 服務(wù)器的吞吐率,每秒處理的請(qǐng)求數(shù)
Time per request 用戶平均請(qǐng)求等待時(shí)間
Time per request 每個(gè)請(qǐng)求實(shí)際運(yùn)行時(shí)間的平均值
Percentage of the requests served within a certain time (ms) 描述每個(gè)請(qǐng)求處理時(shí)間的分布情況

Apache工作模式介紹

  • Apache作為現(xiàn)今web服務(wù)器用的最廣泛也是最穩(wěn)定的開源服務(wù)器軟件
  • 其工作模式有許多種,源碼包安裝httpd時(shí)刻查看httpd-mpm-conf文件,該文件位于extra/conf目錄中
  • 目前主要有兩種模式:
    event模式
    prefork模式
    worker模式
可使用./httpd -l查看apache當(dāng)前工作模式

event工作模式介紹

  • event是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長(zhǎng)連接的時(shí)候占用線程資源被浪費(fèi)的問題
  • event工作模式在遇到某些不兼容的模塊時(shí),會(huì)失效,將會(huì)回退到worker模式
  • event工作模式需要Linux系統(tǒng)(Linux 2.6+)對(duì)epoll的支持,才能啟用。需要補(bǔ)充的是HTTPS的連接(SSL)

event工作方式

  • 在event工作模式中,會(huì)有一些專門的線程用來管理這些keep-alive類型的線程
  • 當(dāng)有真實(shí)請(qǐng)求過來的時(shí)候,將請(qǐng)求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放
  • 這樣,一個(gè)線程就能處理幾個(gè)請(qǐng)求了,實(shí)現(xiàn)了異步非阻塞。這增強(qiáng)了在高并發(fā)場(chǎng)景下的請(qǐng)求處理

event參數(shù)講解

## 在http-mpm.conf配置文件中,以下是event模塊的定義
<IfModule mpm_event_module>
    StartServers    3
    MinSpareThreads     75
    MaxSpareThreads         250
    ThreadsPerChild         25
    MaxRequestWorkers   400
    MaxConnectionsPerChild  0
</IfModule>

參數(shù)說明

參數(shù) 說明
StartServers 服務(wù)啟動(dòng)時(shí)初始的進(jìn)程數(shù),默認(rèn)3
MinSpareThreads 最小的空閑子進(jìn)程數(shù),默認(rèn)75
MaxSpareThreads 最大的空閑子進(jìn)程數(shù),默認(rèn)250
ThreadsPerChild 每個(gè)子進(jìn)程產(chǎn)生的線程數(shù)量,默認(rèn)是25
MaxRequestWorkers 限定同一時(shí)間內(nèi)客戶端最大接入請(qǐng)求數(shù)量,默認(rèn)400
MaxConnectionsPerChild 每個(gè)子進(jìn)程在其生命周期內(nèi)允許的請(qǐng)求數(shù)量,如果請(qǐng)求總數(shù)已經(jīng)達(dá)到這個(gè)數(shù)值,子進(jìn)程將會(huì)結(jié)束,如果設(shè)置為0,子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束。將該值設(shè)置為非0值,可以防止運(yùn)行PHP導(dǎo)致的內(nèi)存泄露

event優(yōu)化建議

可根據(jù)生產(chǎn)環(huán)境進(jìn)行調(diào)試,以確定合適參數(shù)

##優(yōu)化參考
<IfModule mpm event module>
    ServerLimit     1000
    StartServers    20
    MinSpareThreads     25
    MaxSpareThreads     1200
    ThreadsPerChild     50
    MaxRequestWorkers       2000
    MaxC onnectionsPerChild 1000
</IfModule>

prefork工作模式介紹

  • prefork是一個(gè)多路處理模塊(MPM),實(shí)現(xiàn)了一個(gè)進(jìn)程型的,預(yù)派生的web服務(wù)器,適合于沒有線程安全庫,需要避免線程兼容性問題的系統(tǒng)
  • 在要求每個(gè)請(qǐng)求相互獨(dú)立的情況下具有很好的特性,若一個(gè)請(qǐng)求出現(xiàn)問題不會(huì)影響到其他請(qǐng)求
  • 具有很強(qiáng)的自我調(diào)節(jié)能力,只需要很好的配置指令進(jìn)行調(diào)整就可以適合于企業(yè)應(yīng)用要求
  • 最重要的是將MaxClients設(shè)置為一個(gè)足夠大的數(shù)值以處理潛在的請(qǐng)求高峰,同時(shí)又不能太大,以避免所需的內(nèi)存超出物理內(nèi)存的大小
  • 一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程,子進(jìn)程用于監(jiān)聽請(qǐng)求并作出應(yīng)答,因此在內(nèi)存中會(huì)一直存在一些備用的(spare)或是空閑的子進(jìn)程用于響應(yīng)新的請(qǐng)求,可加快響應(yīng)速度
  • 父進(jìn)程通常以root身份進(jìn)行,以便綁定80端口,子進(jìn)程通常以一個(gè)低特權(quán)的用戶運(yùn)行,可通過配置項(xiàng)的User和Group配置
  • 運(yùn)行子進(jìn)程的用戶必須要對(duì)網(wǎng)站內(nèi)容有讀取權(quán)限,但是對(duì)其他資源必須擁有盡可能少的權(quán)限,以保證系統(tǒng)安全
  • 編譯安裝時(shí)沒有指定工作模式,默認(rèn)會(huì)使用prefork模式,可用httpd -l查看

prefork參數(shù)講解

##在httpd-mpm.conf配置文件中,以下是prefork模塊的定義
<IfModule mpm_ prefork module>
    StartServers        20
    MinSpareServers     10
    MaxSpareServers     50
    MaxClients      150
    MaxRequestsPerChild     0
</IfModule>
參數(shù) 說明
ServerLimit 最大進(jìn)程數(shù)
StartServers 啟動(dòng)的時(shí)候創(chuàng)建的進(jìn)程數(shù)量
MinSpareServers 最少空閑進(jìn)程
MaxSpareServers 最多空閑進(jìn)程
MaxClients 最多創(chuàng)建多少個(gè)子進(jìn)程用來處理請(qǐng)求
MaxRequestsPerChild 每個(gè)進(jìn)程處理的最大請(qǐng)求數(shù),達(dá)到請(qǐng)求數(shù),進(jìn)程即被銷毀,如果設(shè)置為0,子進(jìn)程永遠(yuǎn)不會(huì)結(jié)束

prefork優(yōu)化建議

可根據(jù)生產(chǎn)環(huán)境進(jìn)行調(diào)試,以確定合適參數(shù)

##優(yōu)化參考
<IfModule mpm prefork module>
    ServerLimit         1000
    StartServers        10
    MinSpareServers     10
    MaxSpareServers     30
    MaxClients      1000
    MaxRequestsPerChild 5000
</IfModule>

worker工作模式介紹

  • worker也是多路處理模塊(MPM),使網(wǎng)路服務(wù)支持混合的多線程進(jìn)程
  • 由于使用線程來處理請(qǐng)求,所有可以處理海量請(qǐng)求,而系統(tǒng)資源的開銷小于基于進(jìn)程的MPM
  • 但是也使用了多進(jìn)程,每個(gè)進(jìn)程又有多個(gè)線程,以獲得基于進(jìn)程的MPM的穩(wěn)定性
  • 控制該MPM的最重要的指令是:控制每個(gè)子進(jìn)程允許建立的線程數(shù)ThreadsPerChild指令和控制允許建立的總線程數(shù)的MaxClients指令

worker工作方式

  • 每個(gè)進(jìn)程能夠擁有的線程數(shù)量是固定的,服務(wù)器會(huì)根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量
  • 一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立,每個(gè)子進(jìn)程能夠建立ThreadsPerChild數(shù)量的服務(wù)線程和一個(gè)監(jiān)聽線程,監(jiān)聽線程監(jiān)聽接入請(qǐng)求并將其傳遞給服務(wù)器進(jìn)程處理和應(yīng)答
  • Apache總是會(huì)維持一個(gè)備用(spare)或是空閑的服務(wù)器線程池,客戶端無需等待新線程或新進(jìn)程的建立即可得到服務(wù)
  • 父進(jìn)程一般都是以root身份啟動(dòng),以綁定80端口;隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程
  • User和Group指令用于配置Apache子進(jìn)程的運(yùn)行用戶。子進(jìn)程要對(duì)網(wǎng)頁內(nèi)容擁有讀取權(quán)限,但應(yīng)該盡可能限制權(quán)限

worker參數(shù)講解

參數(shù) 說明
ServerLimit 最大進(jìn)程數(shù),默認(rèn)值16“”
ThreadL imit 每個(gè)子進(jìn)程的最大線程數(shù),默認(rèn)值是"64”
StartServers 服務(wù)器啟動(dòng)時(shí)建立的子進(jìn)程數(shù),默認(rèn)值是"3"
MaxClients 允許同時(shí)接受的最大接入請(qǐng)求數(shù)量(最大線程數(shù)量)
MinSpare Threads 最小空閑線程數(shù),,默認(rèn)值是"75"
MaxSpare Threads 設(shè)置最大空閑線程數(shù)。默認(rèn)值是"250"
ThreadsPerChild 每個(gè)子進(jìn)程建立的常駐的執(zhí)行線程數(shù)。默認(rèn)值是25
MaxRequestsPerChild 設(shè)置每個(gè)子進(jìn)程在其生存期內(nèi)允許伺服的最大請(qǐng)求數(shù)量。設(shè)置為"0",子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束

實(shí)例(prefork為例)

[root@localhost httpd-2.4.29]#./configure \
--with-mpm=prefork \  ##添加工作模式此配置項(xiàng)
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf 
輸入/mpm查找此關(guān)鍵詞,將前面的#注釋刪除
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     ##啟動(dòng)的時(shí)候創(chuàng)建的進(jìn)程數(shù)量改為10
        MinSpareServers          10     ##空閑最小改為10
        MaxSpareServers         20      ##最大設(shè)為20
        MaxRequestWorkers      200      ##訪問設(shè)量為200 
        MaxConnectionsPerChild   0
</IfModule>
##修改完成按Esc退出插入模式,輸入:wq保存退出
[root@localhost extra]# cd ../../bin/
[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start
##重新關(guān)閉開啟服務(wù)
[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)
##除去一個(gè)主進(jìn)程,其他的子進(jìn)程變?yōu)?0個(gè)

Apache目錄屬性

  • 目錄的權(quán)限設(shè)置使用<Directory 目錄路徑>和</Directory>這對(duì)語句為主目錄或虛擬目錄設(shè)置權(quán)限
  • 它們是一對(duì)容器語句,必須成對(duì)出現(xiàn),它們之間封裝的是具體的設(shè)置目錄權(quán)限語句,這些語句僅對(duì)被設(shè)置目錄及其子目錄起作用

目錄屬性參數(shù)

參數(shù) 作用
Options 設(shè)置在特定目錄使用哪些特性
AllowOverride 允許存在于.htaccess文件中的指令類型
Require 設(shè)置目錄的訪問控制
Indexes 當(dāng)用戶訪問該目錄時(shí),但沒有指定要訪問哪個(gè)文件,而且目錄下不存在默認(rèn)網(wǎng)頁時(shí),返回目錄中的文件和子目錄列表
MultiViews 內(nèi)容協(xié)商的多重視圖,Apache的一個(gè)智能特性。 當(dāng)訪問目錄中不存在的對(duì)象時(shí)
ExecCGI 允許在該目錄下執(zhí)行CGI腳本
FollowSymLinks 在該目錄下允許文件系統(tǒng)使用符號(hào)連接
Includes 允許服務(wù)器端包含功能
IncludesNoExec 允許服務(wù)器端包含功能,但禁止執(zhí)行CGI腳本
All 包含除了MultiViews之外所有特性,如果沒有Options語句,默認(rèn)為All

實(shí)例(修改配置文件開啟目錄屬性)

[root@localhost bin]# vim /etc/httpd.conf
//輸入/htdocs查找此關(guān)鍵詞,找到如下字段,其中有兩個(gè)功能起到支持作用:

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:以列表形式展現(xiàn)
    //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>

#我們可以先關(guān)閉防火墻,使用宿主機(jī)的瀏覽器進(jìn)行驗(yàn)證
[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><h2>It works!</h2></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
//此時(shí)會(huì)以文件列表的形式展現(xiàn),從另一個(gè)角度我們可以利用這點(diǎn)來做文件下載資源的提供,此時(shí)就不需要首頁識(shí)別

Apache網(wǎng)頁深入優(yōu)化——ab壓力測(cè)試,工作模式

連接文件放到站點(diǎn)中
[root@localhost htdocs]# ln -s /usr/share/man/ ./       
//把man手冊(cè)放入這個(gè)文件夾,看他能不能識(shí)別這個(gè)鏈接文件
[root@localhost htdocs]# ls
a.html  b.html  c.html  d.html  man

Apache網(wǎng)頁深入優(yōu)化——ab壓力測(cè)試,工作模式

謝謝閱讀?。?!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI