Apache中如何實(shí)現(xiàn)ab壓力測試、工作模式與目錄屬性優(yōu)化-創(chuàng)新互聯(lián)

小編給大家分享一下Apache中如何實(shí)現(xiàn)ab壓力測試、工作模式與目錄屬性優(yōu)化,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、沿灘網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

ab壓力測試工具

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

在進(jìn)行性能調(diào)整優(yōu)化過程中,可用ab壓力測是工具進(jìn)行優(yōu)化效果的測試:
1.優(yōu)化前先使用ab進(jìn)行壓力測試
2.優(yōu)化后,重啟服務(wù),再使用ab進(jìn)行壓力測試
3.對比兩次測試的結(jié)果,看優(yōu)化效果是否明顯
4.為了能更客觀的評價(jià)web服務(wù)的性能,一般優(yōu)化前后都要進(jìn)行多次測試,取測試結(jié)果的平均值進(jìn)行對比

ab工具使用

命令格式

ab [options]    網(wǎng)站網(wǎng)址

相關(guān)參數(shù)

-n  發(fā)送的請求量

-c  并發(fā)量

-t      測試所進(jìn)行的大秒數(shù)

-v      設(shè)置顯示信息的詳細(xì)程度

示例

/usr/local/httpd/bin/ab -n5000 -c900 www.kgc.com/index.html
//在測試時(shí)要根據(jù)情況調(diào)整求總數(shù)與并發(fā)用戶數(shù)

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

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

Apache工作模式概述

Apache作為現(xiàn)今web服務(wù)器用的最廣泛也是最穩(wěn)定的開源服務(wù)器軟件。其工作模式有許多種,源碼包安裝httpd時(shí)可查看httpd-mpm.conf文件,該文件位于extra/conf目錄中。

主要有兩種模式

名稱特點(diǎn)
event模式/worker模式一個(gè)進(jìn)程中包含多個(gè)線程
prefork模式一個(gè)進(jìn)程中只包含一個(gè)線程

event工作模式

(1)event是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時(shí)候占用線程資源被浪費(fèi)的問題。event工作模式在遇到某些不兼容的模塊時(shí),會(huì)失效,將會(huì)回退到worker模式。event工作模式需要Linux系統(tǒng)(Linux 2.6+)對epoll的支持,才能啟用。需要補(bǔ)充的是HTTPS的連接(SSL)
(2)在event工作模式中,會(huì)有一些專門的線程用來管理這些keep-alive類型的線程。當(dāng)有真實(shí)請求過來的時(shí)候,將請求傳遞給服務(wù)器的線程執(zhí)行完畢后,又允許它釋放。這樣, 一個(gè)線程就能處理幾個(gè)請求了 ,實(shí)現(xiàn)了 異步非阻塞。這增強(qiáng)了在高并發(fā)場景下的請求處理。

event參數(shù)

在httpd-mpm.conf配置文件中,以下是event模塊的定義

<IfModule mpm_event_module>
  StartServers      3
  MinSpareThreads       75
  MaxSpareThreads       250
  ThreadsPerChild       25
  MaxRequestWorkers     400
  MaxConnectionsPerChild  0
</IfModule>
參數(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)客戶端大接入的請求數(shù)量,默認(rèn)是400
MaxConnectionsPerChild每個(gè)子進(jìn)程在其生命周期內(nèi)允許大的請求數(shù)量, 如果請求總數(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)存泄露

優(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工作模式

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

優(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工作方式

每個(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)聽接入請求并將其傳遞給服務(wù)線程處理和應(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)程要對網(wǎng)頁內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能限制權(quán)限。

worker參數(shù)

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

Apache目錄屬性

目錄的權(quán)限設(shè)置使用<Directory 目錄路徑>和< /Directory > 這對語句為主目錄或虛擬目錄設(shè)置權(quán)限。它們是一-對容器語句,必須成對出現(xiàn),它們之間封裝的是具體的設(shè)置目錄權(quán)限語句,這些語句僅對被設(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)訪問目錄中不存在的對象時(shí)
ExecCGI允許在該目錄下執(zhí)行CGI腳本
FollowSymLinks在該目錄下允許文件系統(tǒng)使用符號連接
Includes允許服務(wù)器端包含功能
IncludesNoExec允許服務(wù)器端包含功能,但禁止執(zhí)行CG腳本
All包含除了MultiViews之外所有特性,如果沒有Options語句,默認(rèn)為All


實(shí)例演示

Apache工作模式之prefork工作模式

一、共享資源包,并編譯安裝Apache服務(wù)

[root@localhost ~]# smbclient -L //192.168.10.37
Enter SAMBA\root's password: 

    Sharename       Type      Comment
    ---------       ----      -------
    LNMP            Disk      

[root@localhost ~]# mount.cifs //192.168.10.37/LNMP /abc
Password for root@//192.168.10.37/LAMP:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls 
apr-1.6.2.tar.gz                  game.jpg
apr-util-1.6.0.tar.gz             httpd-2.4.29.tar.bz2
awstats-7.6.tar.gz                install_lamp.sh
cronolog-1.6.2-14.el7.x86_64.rpm  mysql-5.6.26.tar.gz
Discuz_X2.5_SC_UTF8.zip           nginx-1.12.0.tar.gz
error.png                         php-5.6.11.tar.bz2

[root@localhost abc]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt
[root@localhost abc]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost abc]# tar zxvf apr-util-1.6.0.tar.gz -C /opt
[root@localhost abc]# ls /opt
apr-1.6.2  apr-util-1.6.0  httpd-2.4.29  rh
[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
[root@localhost opt]# cd httpd-2.4.29/
[root@localhost httpd-2.4.29]# yum install -y gcc gcc-c++ pcre-devel zlib-devel expat-devel
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-deflate \
> --with-mpm=prefork \
> --enable-expires \
> --enable-so \
> --enable-rewrite \
> --enable-charset-lite \
> --enable-cgi

[root@localhost httpd-2.4.29]# make && make install

[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf

二、編輯Apache服務(wù)的相關(guān)配置文件

1.修改httpd.conf主配置文件

[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
458 Include conf/extra/httpd-mpm.conf
//檢索到第458 行的的mpm模塊,刪除注釋符#以啟用功能

 51 Listen 192.168.235.137:80       //檢索到地51行的IPv4監(jiān)聽,取消注釋并修改地址為本地Linux服務(wù)器的地址
 52 #Listen 80
//注釋第52行的IPv6監(jiān)聽

193 ServerName www.accp.com:80
//檢索到第193行,取消注釋并自行編輯域名,此處僅供參考

2.查看httpd-mpm.conf配置文件,確認(rèn)prefork工作模式默認(rèn)參數(shù)

[root@localhost httpd-2.4.29]# cd /usr/local/httpd/conf/extra/      //進(jìn)入擴(kuò)展目錄
[root@localhost extra]# ls      //可見httpd-mpm.conf配置文件
httpd-autoindex.conf  httpd-mpm.conf
httpd-dav.conf        httpd-multilang-errordoc.conf
httpd-default.conf    httpd-ssl.conf
httpd-info.conf       httpd-userdir.conf
httpd-languages.conf  httpd-vhosts.conf
httpd-manual.conf     proxy-html.conf

[root@localhost extra]# vim httpd-mpm.conf 
 28 <IfModule mpm_prefork_module>
 29     StartServers             5      //啟動(dòng)時(shí)進(jìn)程數(shù)為5個(gè)
 30     MinSpareServers          5      //最小空閑進(jìn)程數(shù)為5個(gè)
 31     MaxSpareServers         10      //大空閑進(jìn)程數(shù)為10個(gè)
 32     MaxRequestWorkers      250      //大并發(fā)進(jìn)程數(shù)為250個(gè)
 33     MaxConnectionsPerChild   0      //大連接數(shù)限制為0
 34 </IfModule>
//查看prefork工作模式參數(shù)信息

[root@localhost bin]# cd /usr/local/httpd/bin
//切換到Apache服務(wù)的/bin目錄
[root@localhost bin]# ls
ab            checkgid     htcacheclean  httxt2dbm
apachectl     dbmmanage    htdbm         logresolve
apr-1-config  envvars      htdigest      rotatelogs
apu-1-config  envvars-std  htpasswd
apxs          fcgistarter  httpd
[root@localhost bin]# ./apachectl start
//使用Apache服務(wù)的自帶腳本開啟服務(wù)

[root@localhost bin]# netstat -ntap |grep 80        //查看服務(wù)的80端口是否啟用
tcp        0      0 192.168.235.137:80      0.0.0.0:*               LISTEN      35722/httpd      

[root@localhost bin]# lsof -i :80       //查看系統(tǒng)的80端口進(jìn)程信息,其中user為root的是主進(jìn)程,余下的5個(gè)都是子進(jìn)程
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   35722   root    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35723 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35724 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35725 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35726 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35727 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)

3.編輯httpd-mpm.conf配置文件,修改prefork工作模式參數(shù)

[root@localhost bin]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf 

 28 <IfModule mpm_prefork_module>
 29     StartServers                         10         //啟動(dòng)時(shí)進(jìn)程數(shù)改為10個(gè)
 30     MinSpareServers             10          //最小空閑進(jìn)程數(shù)改為10個(gè)
 31     MaxSpareServers             50          //大空閑進(jìn)程數(shù)改為50個(gè)
 32     MaxRequestWorkers      150          //大并發(fā)進(jìn)程數(shù)為150
 33     MaxConnectionsPerChild   0          
 34 </IfModule>

4.重新開啟服務(wù)

[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start

5.查看prefork工作模式的進(jìn)程信息

//使用./httpd -l命令可查看工作模式,當(dāng)前為prefork工作模式
[root@localhost bin]# ./httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c

 //查看進(jìn)程信息,相較之前的默認(rèn)模式多了5個(gè)子進(jìn)程 
[root@localhost bin]# lsof -i :80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   36071   root    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36072 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36073 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36074 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36075 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36076 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36077 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36078 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36079 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36080 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36081 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)

看完了這篇文章,相信你對“Apache中如何實(shí)現(xiàn)ab壓力測試、工作模式與目錄屬性優(yōu)化”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享題目:Apache中如何實(shí)現(xiàn)ab壓力測試、工作模式與目錄屬性優(yōu)化-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://muchs.cn/article42/dddcec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站維護(hù)、微信小程序、網(wǎng)站排名、定制開發(fā)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)