Nginx+PHP-fpm組合,以內(nèi)存占用小,負(fù)載能力強(qiáng)壯的特點(diǎn),成為小內(nèi)存VPS建站的首選組合。我們一起來(lái)探討一下nginx+php-fpm高負(fù)載的優(yōu)化方法。
先來(lái)看看nginx配置參數(shù)的優(yōu)化。nginx是前端接受瀏覽器端請(qǐng)求的web server, 配置可調(diào)的參數(shù)如下:
下面是示例nginx配置
user www-data;
worker_processes 8;
#worker_processes 調(diào)至8, 大于8沒(méi)什么用,小于8,nginx性能發(fā)揮不出來(lái)
worker_cpu_affinity 01 10 01 10 01 10 01 10;
#worker_cpu_affinity 參數(shù)可以使nginx充分發(fā)揮多核Cpu的性能優(yōu)勢(shì) ,上面的配置是針對(duì)雙核CPU的配置。01表示第一個(gè)核,10表示第二個(gè)核,如果是四核cpu,一至四個(gè)核分別表示為 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能打開(kāi)文件的最大句柄數(shù),我們需要把這個(gè)數(shù)字設(shè)大一點(diǎn)。
#linux系統(tǒng)的文件查看數(shù)限制查看是用 ulimit -n ,修改這個(gè)限制是用 ulimit -HSn 65535
events
{
use epoll;
#必須要用高效的event驅(qū)動(dòng),以獲得最大性能
worker_connections 10240;
#max_clients = worker_processes * worker_connections/4 (最大連接數(shù)的計(jì)算公式)
}
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可以調(diào)為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/*;
}
上面的配置里面,有多處設(shè)及到buffer和timeout的地方。我們可以根據(jù)需要,慢慢調(diào)大這些參數(shù),buffer自然是大點(diǎn)好,但不要太大。16K是標(biāo)準(zhǔn)配置,可以增加到32,往上加更大也不是不行,但 要考慮到你系統(tǒng)內(nèi)存大不大,夠不夠用。timeout是超時(shí),如果服務(wù)器很繁忙,不妨增加超時(shí)等待時(shí)間,以避免頻繁出現(xiàn)502錯(cuò)誤。
gzip是必須開(kāi)啟的,reverse proxy在允許的情況下,也盡量開(kāi)啟,一 是可以提升響應(yīng)效率,二是降低服務(wù)器壓力,gzip開(kāi)啟后更可以節(jié)省服務(wù)器帶寬。
nginx主要的配置如上所述。
現(xiàn)在看一下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
#這個(gè)決定了 php-fpm的總進(jìn)程。我們要想同時(shí)響應(yīng)更多的并發(fā)數(shù),這個(gè)數(shù)值要盡可能大,比如500,1000
pm.max_requests = 10000
#并發(fā)數(shù)越大,這個(gè)最大請(qǐng)求數(shù)應(yīng)該越大,并發(fā)數(shù)小,這個(gè)數(shù)值也應(yīng)該越小。它表示,php-fpm進(jìn)程響應(yīng)了10000個(gè)并發(fā)請(qǐng)求之后,就自動(dòng)重啟一下進(jìn)程。
request_terminate_timeout = 30
#表示等待30秒后,結(jié)束那些沒(méi)有自動(dòng)結(jié)束的php腳本,以釋放占用的資源。
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
小內(nèi)存的vps雖然經(jīng)過(guò)使用php-fpm+nginx,提升了系統(tǒng)的效率,可以同時(shí)響應(yīng)較多的并發(fā)請(qǐng)求,但是當(dāng)并發(fā)數(shù)上來(lái)了,比如從100上升到10000,小內(nèi)存肯定響應(yīng)不過(guò)來(lái),cpu也會(huì) 因?yàn)樘Γ鴮?dǎo)致系統(tǒng)負(fù)載變得很高很高,這個(gè)時(shí)候,我們就要考慮升級(jí)硬件配置了。
內(nèi)存越大越好,CPU核心頻率越高越好,CPU核越多越好。硬盤最好是SSD+RAID10。這樣性能不僅高,數(shù)據(jù)安全也有保障。
上面所提到的各個(gè)配置參數(shù),設(shè)及到數(shù)值的,不妨自己 多試著調(diào)小,調(diào)大參數(shù),然后重啟下nginx或者php-fpm進(jìn)程,看看效果怎么樣。
下面介紹一個(gè)比較好的壓力測(cè)試工具,siege.
debian和ubuntu用戶可以通過(guò)apt-get install siege來(lái)安裝siege.
siege是一個(gè)跟ab.exe相似的http壓力測(cè)試軟件。
我們可以用siege來(lái)測(cè)試我們的網(wǎng)站和服務(wù)器性能。
siege -r 100 -c 10 http://www.domain.com/test.php
-r 是 repeat , -r 100是重復(fù)100次測(cè)試
-c 10是表示模擬10個(gè)用戶同時(shí)并發(fā)連接
最后面是要測(cè)試的URL地址。
測(cè)試過(guò)程中可以隨時(shí)按CTRL+C中止進(jìn)程,siege會(huì)生成一個(gè)報(bào)告給我們。
我們可以同時(shí)根據(jù)siege的測(cè)試結(jié)果和監(jiān)視服務(wù)器的負(fù)載情況,對(duì)系統(tǒng)壓力狀況進(jìn)行一個(gè)深入了解和分析。接下來(lái)可以幫助我們判斷該如何進(jìn)行下一步操作,是繼續(xù)優(yōu)化配置,還是升級(jí)硬件。
新聞熱點(diǎn)
疑難解答
圖片精選