Aapache工做模式深度優化,ab壓力測試,apache目錄屬性

Aapache工做模式深度優化,ab壓力測試,apache目錄屬性

ab壓力測試

Apache自帶壓力測試工具ab,簡單易用,且能夠模擬各類條件對web服務器發起測是請求
ab工具能夠直接在web服務器本地發起測是請求,這對於須要瞭解服務器的處理性能相當重要,由於它不包括數據的網絡傳輸時間以及用戶pc本地的計算時間,從而能夠經過觀測各類時間指標判斷web服務器的性能,以便進行參數的優化調整

ab壓力測試工具的做用

優化前先使用ab進行壓力測試
優化後,重啓服務,再使用ab進行壓力測試
對比兩次測試的結果,看優化效果是否明顯
爲了能更客觀的評價web服務的性能,通常優化先後都要進行屢次測試,取測試的平均值進行對比

ab壓力測試工具的使用,參數說明

ab[options]  網站網址

-n,-c,-t,-v

實例

#Apac/usr/local/httpd/bin/ab -n5000 -c900 www.kgc.com/index.html

ab工具測試結果的關鍵測試說明

Aapache工做模式深度優化,ab壓力測試,apache目錄屬性

Apache工做模式介紹

在測試時要根據狀況調整求總數與併發用戶數he工做模式介紹html

Apache做爲先今web服務器用的最爲普遍也是最穩定的開源服務器軟件。
其工做模式有許多中,源碼包安裝HTTPD時可查看httpd-mpm.cong文件,該文件位於extra/conf目錄中
目前主要有兩種模式:
event模式
preork模式
worker模式
工做模式怎麼區分
prefork:一個進程中包含一個線程
worker/event:一個進程中包含多個進程

event工做模式介紹

event是Apache最新的工做模式,他和worker模式很像,不一樣的是在於它解決了keep-alive長鏈接的時候佔用線程資源被浪費的問題
event工做模式在遇到某寫不兼容的模塊時,會失效,將會回退到worker模式
event工做模式須要Linux系統(Linux 2.6+)對epoll的支持,才能啓用,須要補充的是HTTPS的鏈接(SSL)
event創建鏈接,保持鏈接,就像打電話說一下子掛段,再說一下子掛段,我能夠設置超時時間,超過就斷開,隨時能夠斷開會話功能。

event工做方式

在event工做模式中,會有一些專門的線程用來管理這些keep-alive類型的線程
當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢後,又容許它釋放,這樣,一個線程就能處理幾個請求了,實現了異步非阻塞。這加強了在高併發場景下的請求處理
靈活控制,多個請求時,能夠把以前的進程釋放,能處理高併發

event參數詳解

<ifMoudle mpm_event_module>
StartServers  3    配置文件中,啓動3個進程
MinSpare Threads  75  最少空閒的線程數量 75
MaxSpare Threads 250  最大空閒的線程數量  250
ThreadsPerChild  25  每一個進程中默認開啓25個線程
MaxRequestWorkers  400 併發最大請求數量400個
MaxConnectionsPerChild  0 若是設置爲0.子進程將永遠不會結束,若是設置成非0值,能夠防止運行PHP致使的內存泄露

prefork工做模式介紹

prefork是一個多路處理模塊(MPM),實現了一個進程型的,預排生的web服務器,適合於沒有線程安全庫,須要避免線程兼容性問題的系統
再要求每一個請求相互獨立的狀況下具備很好的特性。若一個請求出現問題不會影響到其餘請求
具備很強的自我調節能力,只須要不多的配置指令進行調整就能夠適合於企業應用要求
最重要的是將MaxClients設置爲一個足夠大的數值已處理潛在的請求高峯,同時又不能太大,以免所需的內存超出物理內存的大小

prefork工做模式方式

一個單獨的控制進程(父進程)負責產生子進程,子進程用於監聽請求並做出應答,所以在內存中會一直存在一些備用的(spare)或是空閒的子進程,用於響應新的請求,可加快響應速度
父進程一般以root身份 運行,以便綁定80端口,子進程一般以一個低特權的用戶運行,可經過配置項的User和Group配置
運行子進程的用戶必需要對網站內容有讀取權限,可是對其餘資源必須擁有儘量少的權限,以保證系統安全
編譯安裝時沒有指定工做模式,默認會使用prefork模式,可用httpd -l查看

prefork參數講解

<ifModule mpm_prefork_module>
StartServers  20  最大進程數
MinSpareServers  10  最少空閒進程
MaxSpareServers  50  最多空閒進程
MaxClients  150  最多建立多少個子進程用來處理請求
MaxRequestPerChild  0  每一個進程處理的最大請求數,到請求數,進程即被銷燬,若是設置爲0,子進程永遠不會結束

prefork優化

可根據生產環境進行調試,以肯定合適參數
##優化參考
<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
//此時會以文件列表的形式展示,從另外一個角度咱們能夠利用這點來作文件下載資源的提供,此時就不須要首頁識別

Aapache工做模式深度優化,ab壓力測試,apache目錄屬性

鏈接文件放到站點中

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

Aapache工做模式深度優化,ab壓力測試,apache目錄屬性

相關文章
相關標籤/搜索