前言
系統:兩臺Centos7,一臺作Nginx運行機器,一臺是壓測程序運行機器
CPU核數:4核
工具準備:ab壓測工具
yum install httpd-tools -y
無法安裝的同學,添加yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirror-sng.oa.com/repo/Centos-7.repo
cd /etc/yum.repos.d
sed -i 's/\$releasever/7/g' CentOS-Base.repo
注意,壓測壓不上去,檢查ab程序和nginx是不是同一臺機器,同一機器影響壓測結果,因爲ab和nginx都在搶佔cpu
實驗
1. Nginx的配置調優:Nginx進程數
編輯nginx配置文件nginx.conf
客戶端最大連接數 = worker_processes * worker_connections
worker_processes 4;
worker_connections 20480;
2.Linux系統參數設置:文件句柄設置
如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到“too many files open”的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本可以幫你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
a. 臨時修改linux的最大文件句柄數限制的方法:
ulimit -n 500000
在當前session有效,用戶退出或者系統重啓後恢復默認值
b. 用戶級修改:
sudo vim /etc/security/limits.conf
* soft nofile 500000 #限制單個進程最大文件句柄數(到達此限制時系統報警)
* hard nofile 500000 #限制單個進程最大文件句柄數(到達此限制時系統報錯)
星號表示任何用戶,soft/hard表示軟限制、硬限制。修改/etc/pam.d/login文件指定使用PAM
c. 系統級別修改:
echo "500000" > /proc/sys/fs/file-max
d. 修改profile文件:在profile文件中添加:ulimit -n 500000
,只對當前用戶有效
3. Linux的內核參數調優:內核網絡tcp包複用
# 設置端口複用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
# 關閉防止syncflood
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
# 增大服務端全連接隊列大小
echo 50000 > /proc/sys/net/core/somaxconn
結果
ab -n 200000 -c 20000 ‘http://127.0.0.1/index.html’
ab壓測與nginx在同臺服務器,會造成CPU競爭的處理方法
top命令,按f,再按j,可以看到進程使用的CPU是哪個,或者taskset -p 進程id
綁定方法,使用taskset將ab綁定
ulimit -c unlimited
cpuid=$( cat /proc/cpuinfo |grep -E 'processor.*:.*'|awk -F '[ :]' '{print $NF}'|tail -n1 )
nc=$(nice) ; nc=$(( 0 - $nc + 3))
taskset -c ${cpuid} nice -n $nc ./${CHANNEL_SERVER} -c ../conf/ncs_agent.xml >/dev/null 2>&1
或者將nginx綁定在其他核
調整nginx優先級
nc=-10
renice -n $nc -p $$
nginx 1.9.10 已經支持自動CPU親緣性,即worker_cpu_affinity auto; 參數
參考
參考:
https://blog.51cto.com/purplegrape/1252197
https://www.jianshu.com/p/b932ca0726f3
https://www.liaoxuefeng.com/article/990311924891552
https://blog.creke.net/762.html