首頁 > 类库下载 > PHP类库 > php + nginx 網站並發壓力測試及最佳化

php + nginx 網站並發壓力測試及最佳化

高洛峰
發布: 2016-10-20 13:41:54
原創
3286 人瀏覽過

一、測試工具:

Apache 壓力測試工具ab

ab是針對apache的效能測試工具,可以只安裝ab工具。

ubuntu安裝ab

apt-get install apache2-utils
登入後複製

centos安裝ab

yum install httpd-tools
登入後複製

ab的參數詳細解釋

格式: ./ab [options] [http://]hostname[:port]/path

參數:在測試會話中所執行的請求個數。預設時,僅執行一個請求。

-c一次產生的請求個數。預設是一次一個。

-t測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。

-p包含了需要POST的資料的檔案。

-P對一個中轉代理提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式發送。無論伺服器是否需要(即, 是否發送了401認證需求代碼),此字串都會被傳送。

-T POST資料所使用的Content-type頭資訊。

-v設定顯示訊息的詳細程度-4或更大值會顯示頭訊息,3或更大值可以顯示回應碼(404,200等),2或更大值可以顯示警告和其他資訊。

-V顯示版本號並退出。

-w以HTML表的格式輸出結果。預設時,它是白色背景的兩列寬度的一張表。

-i執行HEAD請求,而不是GET。

-x設定

屬性的字串。

-X對請求使用代理伺服器。

-y設定

屬性的字串。

-z設定

屬性的字串。

-C對請求附加一個Cookie:行。其典型形式是name=value的一個參數對,此參數可以重複。

-H對請求附加額外的頭資訊。此參數的典型形式是一個有效的頭資訊行,其中包含了以冒號分隔的字段和值的對(如,"Accept-Encoding:zip/zop;8bit")。

-A對伺服器提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式發送。無論伺服器是否需要(即,是否發送了401認證需求代碼),此字串都會被發送。

-h顯示使用方法。

-d不顯示"percentage served within XX [ms] table"的訊息(為先前的版本提供支援)。

-e產生一個以逗號分隔的(CSV)文件,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙為單位)時間。由於這種格式已經“二進制化”,所以比'gnuplot'格式更有用。

-g把所有測試結果寫入一個'gnuplot'或TSV(以Tab分隔的)檔。此文件可以方便地匯入Gnuplot,IDL,Mathematica,Igor甚至Excel。其中的第一個行為標題。

-i執行HEAD請求,而不是GET。

-k啟用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。預設時,不啟用KeepAlive功能。

-q如果處理的請求數大於150,ab每處理約10%或100個請求時,會在stderr輸出一個進度數。此-q標記可以抑制這些訊息。

eg:

### POST /user/login

ab -n 100 -kc 10 -p user_login -T 'application/json' -H 'Accept-Encoding:gzip, deflate' -H 'accept-language:zh-Hans-CN;q=1, en-CN;q=0.9'  http://XXX/user/login


##### request data
文件 user_login 内容:
{"email":"ws65536@qq.com","password":"ws65536"}
登入後複製
### GET /default/index

ab -n 1000 -c 100 http://XXX/default/index
登入後複製

測試的同時可以在被測試的伺服器上使用htop指令查看CPU和記憶體的即時使用情況:

php + nginx 網站並發壓力測試及最佳化

關於abache 可參考

二、設定最佳化

nginx處理PHP請求有三個步驟。

第一步:接受請求,發現是PHP請求,轉向第二步。

第二步:透過socket的方式,連接PHP-FPM的fast-cgi,讓PHP-FPM處理請求。

第三步:取得PHP-FPM處理結果,加上http報頭,回傳給客戶端。

所以,我們要提高nginx的PHP並發性能,我們需要做這三步驟。

1.調大nginx的並發連接數(調nginx.conf 的worker_connections 和 worker_processes)。

worker_connections : 每個worker進程能並發處理(發起)的最大連接數(包含所有連接數)

worker_processes :指明了nginx要開啟的進程數,據官方說法,一般開一個就夠了,多開一個幾個,可以減少機器io帶來的影響。 一般為目前機器總cpu核心數的1到2倍。

參考:

nginx 並發數問題思考:worker_connections,worker_processes與 max clients

Nginx工作原理與最佳化、漏洞

2.调大php-fpm的并发连接数(调php-fpm.conf 的pm.max_children等)。

本人用的是Ubuntu 14.04.4,PHP 5.5.9,以下目录结构对其他服务器环境可能不适用。

由于在 /etc/php5/fpm/php-fpm.conf 中并没有找到 max_children ,于是使用以下命令进行查找:

# 在/etc/php5/fpm 目录下查找所有文件,并依次在每个文件中查找"max_children"
sudo find /etc/php5/fpm -name * | xargs grep "max_children"
登入後複製

终于在 /etc/php5/fpm/pool.d/www.conf 中找到了 max_children 等相关配置。

关于具体配置,请参考以下内容:

(PHP手册)FastCGI 进程管理器(FPM)

php-fpm的配置和优化

PHP-FPM性能优化参考

PHP FPM php-fpm.conf设置详解

3.增加系统的最大文件数量限制(ulimit -n 65535)。

由于NGINX处理PHP请求的第二步需要通过socket的方式和PHP-FPM通信,它能新建的最大socket数受到系统最大打开文件数的限制。新装的Linux默认只有1024,所以必须增加系统最大打开文件数目。

ulimit -n 命令可以查看当前系统最大打开文件数。

ulimit -n 65535 可以将系统最大打开文件数临时修改为65535,然而退出登录后就会失效。

想要修改系统最大打开文件数,并永久生效:

vi /etc/security/limits.conf
        
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 65535
* hard nofile 65535
登入後複製

说明:

* 代表针对所有用户

noproc 是代表最大进程数

nofile 是代表最大文件打开数

具体配置参考一下内容:

ulimit -n 修改

linux有效修改max open files/ulimit -n


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板