壓測是確定系統穩定性的一種測試方法,在系統正常運行範圍之外進行,主要測試功能極限和隱患。針對遊戲的壓測從傳統意義上來說就是對網絡服務的服務器不斷施加“壓力”,也就是通過確定一個系統的瓶頸或不能接收的性能點,來獲得系統能提供的最大服務級別的測試。主要用來檢查遊戲服務器的承受能力,包括用戶承受能力和流量承受能力。
軟件環境參數
LNMP優化的手段主要包括
文件句柄數量
PHP 緩存
Nginx編譯
Nginx pagespeed
Nginx 緩存
Nginx 壓縮
Nginx CPU綁定
Nginx處理PHP請求的流程
接收請求若發現是PHP請求則轉入第2步
通過socket方式連接PHP-FPM的FastCGI,讓PHP-FPM處理請求。
獲取PHP-FPM處理結果,並附加HTTP報頭,返回給客戶端。
提高Nginx的PHP併發性
1、調整Nginx的併發連接數
worker_connections 51200;
worker_connections 指令表示每個工作進程允許的最大連接數,也就是每個worker進程能併發處理的最大連接數(包含所有連接數),理論上單臺Nginx服務器的最大連接數為 worker_processes * worker_connections。
worker_processes auto;
worker_processes 指明瞭Nginx要開啟的進程數量,官方建議開一個就可以了,多開可以減少磁盤IO帶來的影響,一般為當前機器CPU核心數量的1到2倍。
worker_processes 指令表示Nginx進程數,建議按照CPU數量來指定,一般為它的倍數,例如2個四核CPU則計算為8。
2、調整PHP-FPM的併發連接數
$ sudo find /etc/php/fpm -name * | xargs grep "max_children"
3、調整系統的最大文件數量限制
由於Nginx處理PHP請求的第二步需要通過Socket和PHP-FPM通信,Nginx能夠建立的最大Socket數量受到系統最大打開文件數量的限制,Linux默認只有1024。
Nginx核心配置
$ vim /usr/local/nginx/conf/nginx.conf
打開Nginx的配置文件,具體配置項目如下:
worker_rlimit_nofile 51200;
worker_rlimit_nofile指令表示一個nginx進程打開文件描述符的最大數量,建議與Linux的ulimit -n的值保持一致。
Linux內核下開啟文件打開數量為65535,Nginx的worker_rlimit_nofile最好與之保持一致。
use epoll;
epoll是多路複用I/O中的一種方式,僅用於Linux2.6+內核,可大大提高Nginx的性能。
keepalive_timeout 60;
keepalive超時時間
client_header_buffer_size 32k;
client_header_buffer_size 表示客戶端請求頭部的緩衝區大小,可根據系統分頁大小來設置,一般請求頭大小不超過1KB。
Ngnix的HTTP配置
PHP-FPM
$ vim /usr/local/php/etc/php-fpm.conf
# 進程管理方式:動態dynamic、靜態static
pm = dynamic
pm參數指定了進程管理方式:
靜態方式:在PHP-FPM啟動的時候就創建了指定數量的進程,在運行過程中不會再有變化,但並不是真的就永遠不變了。
動態方式:在運行過程中動態調整,當然也不是無限制的創建新進程,它受到pm.max_spare_servers參數的影響。
簡單來說,動態方式適合小內存機器,靜態方式適用於大內存機器。動態方式,靈活分配進程,比較節省內存,但同時動態創建回收進程對服務器資源也是一種消耗。
Webbench是由Lionbridge公司開發的網站壓力測試工具
Webbench標準測試可以展示服務器的兩項內容:每秒請求數量、每秒傳輸數據量
Webbench最多可模擬3w併發連接
使用說明
MySQL默認配置為my.cnf,系統已提供可選的配置文件。
硬件負載在壓測期間,可使用top命令,觀察目標服務器上性能變化。
# 查看CPU負載情況
$ top
# 查看內存使用情況
$ free -m
# 查看磁盤IO情況
$ iostat -kx 2
# 查看網絡流量情況
# sar -n DEV 2