測試機器爲騰訊雲服務器1核1G內存,swap分區2G,停用除SSH外的所有服務,僅保留nginx,優化思路主要包括兩個層面:sysctl系統設置+nginx參數設置。
【 systemctl是systemd的管理工具, systemd複製管理系統和進程】
【 sysctl命令被用於在內核運行時動態地修改內核的運行參數,可用的內核參數在目錄/proc/sys中】
第一步:sysctl系統設置
先查看--再改--再查看(不要直接上來就改,否則不知道是否改變)
## 打開文件數量
ulimit -a
ulimit -n 20480
【騰訊雲服務器的,文件地址也是一樣的,TCP屬於OSI傳輸層協議,是底層,所有linux應該都是一樣的】
【commond>file是將輸出重定向到file,shell語法】
## TCP最大連接數
cat /proc/sys/net/core/somaxconn ##我的結果是128
echo 10000 > /proc/sys/net/core/somaxconn
##TCP連接立即回收、回用
cat /proc/sys/net/ipv4/tcp_tw_reuse ##我的結果是1,不需要改了
cat /proc/sys/net/ipv4/tcp_tw_recycle ##我的結果是1,不需要改了
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
cat /proc/sys/net/ipv4/tcp_syncookies ##我的結果是1
echo 0 > /proc/sys/net/ipv4/tcp_syncookies ## 屏蔽TCP異步
sysctl -p ## 設置生效
第二步:nginx參數設置
【參考鏈接4、5裏面有更詳細配置,可以參考】
【## worker 進程數應該設置爲等於 CPU 的核數,高流量併發場合也可以考慮將進程數提高至 CPU 核數 *2 】
【 # 查看CPU核數 grep -c processor /proc/cpuinfo】
worker_processes 1;
worker_rlimit_nofile 20000; ##配置Nginx worker進程最大打開文件數
events
{
use epoll;
worker_connections 20000; ##單個進程允許的客戶端最大連接數
multi_accept on;
}
http {
keepalive_timeout 0;
}
##重啓nginx
【 命令格式 systemctl [command] [unit]】
systemctl restart nginx
————————————————
參考原文:
LNMP 高併發配置(解決上萬併發量不是問題)https://blog.csdn.net/zha2008min/article/details/103438170
參考鏈接:
1. systemctl VS sysctl VS service VS init.d https://www.dazhuanlan.com/2019/12/13/5df2f21849302/
2. Linux ulimit命令 https://www.runoob.com/linux/linux-comm-ulimit.html
3. 常用的Linux下查看服務器配置的命令(命令結果沒有具體的標註) https://blog.csdn.net/u011636440/article/details/78611838
4. nginx優化worker進程最大打開文件數worker_rlimit_nofile(作者也是轉載,有原文鏈接) https://blog.csdn.net/weixin_34331102/article/details/91681934
我不放原文鏈接,是怕原文url有一天打不開了
5. nginx——優化 Nginx worker 進程數 https://www.cnblogs.com/qianbixueyuan/p/9518770.html
6. 怎樣纔算高併發? https://blog.csdn.net/jiaweiok123/article/details/87804081