Apache網頁深入優化之ab壓力測試、工作模式與目錄屬性優化

ab壓力測試工具

Apache自帶壓力測試工具ab,簡單易用,且可以模擬各種條件對Web服務器發起測試請求。ab工具可以直接在Web服務器本地發起測試請求,這對於需要了解服務器的處理性能至關重要,因爲它不包括數據的網絡傳輸時間以及用戶PC本地的計算時間,從而可以通過觀測各種時間指標判斷Web服務器的性能,以便進行參數的優化調整。

在進行性能調整優化過程中,可用ab壓力測是工具進行優化效果的測試:
1.優化前先使用ab進行壓力測試
2.優化後,重啓服務,再使用ab進行壓力測試
3.對比兩次測試的結果,看優化效果是否明顯
4.爲了能更客觀的評價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模式/worker模式 一個進程中包含多個線程
prefork模式 一個進程中只包含一個線程

event工作模式

(1)event是Apache最新的工作模式,它和worker模式很像,不同的是在於它解決了keep-alive長連接的時候佔用線程資源被浪費的問題。event工作模式在遇到某些不兼容的模塊時,會失效,將會回退到worker模式。event工作模式需要Linux系統(Linux 2.6+)對epoll的支持,才能啓用。需要補充的是HTTPS的連接(SSL)
(2)在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程。當有真實請求過來的時候,將請求傳遞給服務器的線程執行完畢後,又允許它釋放。這樣, 一個線程就能處理幾個請求了 ,實現了 異步非阻塞。這增強了在高併發場景下的請求處理。

event參數

在httpd-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導致的內存泄露

優化建議:可根據生產環境進行調試,以確定合適參數
優化參考:

<IfModule mpm event module>
  ServerLimit       1000
  StartServers       20
  MinSpareThreads       25
  MaxSpareThreads       1200
  ThreadsPerChild       50
  MaxRequestWorkers     2000
  MaxC onnectionsPerChild 1000
</IfModule>

prefork工作模式

(1)prefork是一個多路處理模塊(MPM),實現了一個進程型的、預派生的web服務器,適合於沒有線程安全庫、需要避免線程兼容性問題的系統。在要求每個請求相互獨立的情況下具有很好的特性,若一個請求出現問題不會影響到其他請求。具有很強的自我調節能力,只需要很少的配置指令進行調整就可以適合於企業應用要求。最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以避免所需的內存超出物理內存的大小
(2)一個單獨的控制進程(父進程)負責產生子進程,子進程用於監聽請求並作出應答,因此在內存中會- -直存在一-些備用的(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,子進程永遠不會結束

優化建議:可根據生產環境進行調試,以確定合適參數
優化參考:

<IfModule mpm prefork module>
  ServerLimit           1000
  StartServers          10
  MinSpareServers           10
  MaxSpareServers           30
  MaxClients            1000
  MaxRequestsPerChild   5000
</IfModule>

worker工作方式

每個進程能夠擁有的線程數量 是固定的,服務器會根據負載情況增加或減少進程數量。一個單獨的控制進程(父進程)負責子進程的建立。每個子進程能夠建立ThreadsPerChild數量的服務線程和一個監聽線程,監聽線程監聽接入請求並將其傳遞給服務線程處理和應答。Apache總是會維持一個備用(spare)或是空閒的服務線程池, 客戶端無須等待新線程或新進程的建立即可得到服務。父進程一般都是以root身份啓動,以綁定80端口;隨後,Apache以較低權限的用戶建立子進程和線程。User和Group指令用於配置Apache子進程的運行用戶。 子進程要對網頁內容擁有讀權限,但應該儘可能限制權限。

worker參數

參數 說明
ServerLimit 最大進程數,默認值是"16"
ThreadLimit 每個子進程的最大線程數,默認值是“64”
StartServers 服務器啓動時建立的子進程數,默認值是"3"
MaxClients 允許同時接受的最大接入請求數量(最大線程數量)
MinSpare Threads 最小空閒線程數,默認值是"75"
MaxSpareThreads 設置最大空閒線程數。默認值是"250"
ThreadsPerChild 每個子進程建立的常駐的執行線程數。默認值是25
MaxRequestsPerChild 設置每個子進程在其生存期內允許伺服的最大請求數量。設置爲"0",子進程將永遠不會結束

Apache目錄屬性

目錄的權限設置使用<Directory 目錄路徑>和< /Directory > 這對語句爲主目錄或虛擬目錄設置權限。它們是一-對容器語句,必須成對出現,它們之間封裝的是具體的設置目錄權限語句,這些語句僅對被設置目錄及其子目錄起作用。

目錄屬性參數

參數 作用
Options 設置在特定目錄使用哪些特性
AllowOverride 允許存在於htaccess文件中的指令類型
Require 設置目錄的訪問控制
Indexes 當用戶訪問該目錄時,但沒有指定要訪問哪個文件,而且目錄下不存在默認網頁時,返回目錄中的文件和子目錄列表
MultiViews 內容協商的多重視圖,Apache的一 個智能特性。當訪問目錄中不存在的對象時
ExecCGI 允許在該目錄下執行CGI腳本
FollowSymLinks 在該目錄下允許文件系統使用符號連接
Includes 允許服務器端包含功能
IncludesNoExec 允許服務器端包含功能,但禁止執行CG 腳本
All 包含除了MultiViews之外所有特性,如果沒有Options語句,默認爲All


實例演示

Apache工作模式之prefork工作模式

一、共享資源包,並編譯安裝Apache服務

[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服務的相關配置文件

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監聽,取消註釋並修改地址爲本地Linux服務器的地址
 52 #Listen 80
//註釋第52行的IPv6監聽

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

2.查看httpd-mpm.conf配置文件,確認prefork工作模式默認參數

[root@localhost httpd-2.4.29]# cd /usr/local/httpd/conf/extra/      //進入擴展目錄
[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      //啓動時進程數爲5個
 30     MinSpareServers          5      //最小空閒進程數爲5個
 31     MaxSpareServers         10      //最大空閒進程數爲10個
 32     MaxRequestWorkers      250      //最大併發進程數爲250個
 33     MaxConnectionsPerChild   0      //最大連接數限制爲0
 34 </IfModule>
//查看prefork工作模式參數信息

[root@localhost bin]# cd /usr/local/httpd/bin
//切換到Apache服務的/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服務的自帶腳本開啓服務

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

[root@localhost bin]# lsof -i :80       //查看系統的80端口進程信息,其中user爲root的是主進程,餘下的5個都是子進程
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工作模式參數

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

 28 <IfModule mpm_prefork_module>
 29     StartServers                         10         //啓動時進程數改爲10個
 30     MinSpareServers             10          //最小空閒進程數改爲10個
 31     MaxSpareServers             50          //最大空閒進程數改爲50個
 32     MaxRequestWorkers      150          //最大併發進程數爲150
 33     MaxConnectionsPerChild   0          
 34 </IfModule>

4.重新開啓服務

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

5.查看prefork工作模式的進程信息

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

 //查看進程信息,相較之前的默認模式多了5個子進程 
[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)

---謝謝閱讀---

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章