Nginx+PHP-fpm高負載優化及壓力測試方法


Nginx+PHP-fpm組合,以內存占用小,負載能力強壯的特點,成為小內存VPS建站的首選組合。我們一起來探討一下nginx+php-fpm高負載的優化方法。

先來看看nginx配置參數的優化。nginx是前端接受瀏覽器端請求的web server, 配置可調的參數如下:

下面是示例nginx配置

user www-data;
worker_processes  8;

#worker_processes 調至8, 大於8沒什么用,小於8,nginx性能發揮不出來
worker_cpu_affinity 01 10 01 10 01 10 01 10;

#worker_cpu_affinity 參數可以使nginx充分發揮多核Cpu的性能優勢 ,上面的配置是針對雙核CPU的配置。01表示第一個核,10表示第二個核,如果是四核cpu,一至四個核分別表示為 0001 0010 0100 1000

error_log  /var/log/nginx/error_log crit;
pid        /var/run/nginx.pid;
worker_rlimit_nofile 10240;

#worker_rlimit_nofile 是nginx能打開文件的最大句柄數,我們需要把這個數字設大一點。

#linux系統的文件查看數限制查看是用 ulimit -n ,修改這個限制是用 ulimit -HSn 65535

events
{
use epoll;

#必須要用高效的event驅動,以獲得最大性能
worker_connections  10240;

#max_clients = worker_processes * worker_connections/4 (最大連接數的計算公式)

}
http
{
include /etc/nginx/deny.iplist;
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
server_tokens off;
client_header_buffer_size 32k;

#client頭buffer可以調為32K
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile        on;
tcp_nopush     on;
keepalive_timeout 65;
tcp_nodelay        off;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 60;
output_buffers 1 32k;
postpone_output 1460;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
gzip on;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_proxied        expired no-cache no-store private auth;
proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:80m inactive=1d  max_size=2500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 300;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size  16k;
proxy_buffers      4 16k;
upstream wordpressnginx
{
server 127.0.0.1:6000 weight=1 fail_timeout=120s;
}
include /etc/nginx/sites-enabled/*;
}

上面的配置里面,有多處設及到buffer和timeout的地方。我們可以根據需要,慢慢調大這些參數,buffer自然是大點好,但不要太大。16K是標准配置,可以增加到32,往上加更大也不是不行,但 要考慮到你系統內存大不大,夠不夠用。timeout是超時,如果服務器很繁忙,不妨增加超時等待時間,以避免頻繁出現502錯誤。

gzip是必須開啟的,reverse proxy在允許的情況下,也盡量開啟,一 是可以提升響應效率,二是降低服務器壓力,gzip開啟后更可以節省服務器帶寬。

nginx主要的配置如上所述。

現在看一下php-fpm的配置。
[global]
pid = run/php5-fpm.pid
process_control_timeout = 5
[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
user = www-data
group = www-data
pm = static
pm.max_children = 7

#這個決定了 php-fpm的總進程。我們要想同時響應更多的並發數,這個數值要盡可能大,比如500,1000
pm.max_requests = 10000

#並發數越大,這個最大請求數應該越大,並發數小,這個數值也應該越小。它表示,php-fpm進程響應了10000個並發請求之后,就自動重啟一下進程。
request_terminate_timeout = 30

#表示等待30秒后,結束那些沒有自動結束的php腳本,以釋放占用的資源。
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

小內存的vps雖然經過使用php-fpm+nginx,提升了系統的效率,可以同時響應較多的並發請求,但是當並發數上來了,比如從100上升到10000,小內存肯定響應不過來,cpu也會 因為太忙,而導致系統負載變得很高很高,這個時候,我們就要考慮升級硬件配置了。

內存越大越好,CPU核心頻率越高越好,CPU核越多越好。硬盤最好是SSD+RAID10。這樣性能不僅高,數據安全也有保障。

上面所提到的各個配置參數,設及到數值的,不妨自己 多試着調小,調大參數,然后重啟下nginx或者php-fpm進程,看看效果怎么樣。

下面介紹一個比較好的壓力測試工具,siege.

debian和ubuntu用戶可以通過apt-get install siege來安裝siege.

siege是一個跟ab.exe相似的http壓力測試軟件。

我們可以用siege來測試我們的網站和服務器性能。

siege -r 100 -c 10 http://www.domain.com/test.php

-r 是 repeat , -r 100是重復100次測試

-c 10是表示模擬10個用戶同時並發連接

最后面是要測試的URL地址。

測試過程中可以隨時按CTRL+C中止進程,siege會生成一個報告給我們。

我們可以同時根據siege的測試結果和監視服務器的負載情況,對系統壓力狀況進行一個深入了解和分析。接下來可以幫助我們判斷該如何進行下一步操作,是繼續優化配置,還是升級硬件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM