共計 9005 個字符,預計需要花費 23 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 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 Softwarehttp 響應數據的頭信息 Server Hostname 請求的 url 中的主機名稱 Server Portweb 服務器軟件的監聽端口 Document Path 請求的 url 根的絕對路徑 Document Lengthhttp 響應數據的正文長度 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 服務啟動時初始的進程數,默認 3MinSpareThreads 最小的空閑子進程數,默認 75MaxSpareThreads 最大的空閑子進程數,默認 250ThreadsPerChild 每個子進程產生的線程數量,默認是 25MaxRequestWorkers 限定同一時間內客戶端最大接入的請求數量,默認是 400MaxConnectionsPerChild 每個子進程在其生命周期內允許最大的請求數量,如果請求總數已經達到這個數值,子進程將會結束,如果設置為 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 每個子進程建立的常駐的執行線程數。默認值是 25MaxRequestsPerChild 設置每個子進程在其生存期內允許伺服的最大請求數量。設置為 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)
看完了這篇文章,相信你對“Apache 中如何實現 ab 壓力測試、工作模式與目錄屬性優化”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!