基於 LNMP 的 Nginx 百萬併發之路 (二)配置檔案 main 段主引數

cn-five發表於2020-09-10

Nginx 中 main 段引數為全域性引數, httpserver段的皆在 main 段引數的作用之下。

timer_resolution time
timer_resolution 80ms;

worker 子程式內部計時器精度,調整時間間隔越大, worker 子程式和外部應用程式之間的切換時間越長,也就避免了過度切換,保證了高效能。

worker_rlimit_nofile number
worker_rlimit_nofile 50000;

設定 worker 子程式可以開啟的最大檔案控制程式碼數。如果想要 Nginx 承載更多的併發可以設定更大的數字。埠最大數為 65335,但理論上 tcp 連線數會遠超過 65535,這是因為理論上的 ip 地址數為 2 的 ip位數的次方,相應的理論 tcp 連線數與之一樣的多。由於 Nginx 分配請求並非均衡,最好將此數字設定為儘可能的高以避免超過 worker 子程式的最大限制而返回伺服器 502 錯誤。

worker_rlimit_core size
worker_rlimit_core 80M;

設定 worker 子程式異常終止後記錄分析問的 core 檔案。

worker_processes number | auto
worker_processes number 4;
worker_processes number auto;

設定 Nginx 啟動的 woker 子程式數量,auto 表示根據 cpu 個數自動設定。可以由 lscpu 命令檢視 cpu 個數。

worker_cpu_affinity cpu1 cpu2 ...
worker_cpu_affinity 0001 0010 0100 1000

過多上下文切換造成不必要的效能開銷,繫結 cpu 可以利用 cpu 快取保持高效能。

worker_priority number
worker_priority number -5;

設定 worker 子程式的 nice 值以調整 Nginx 執行的優先值。程式啟動時,nice 值預設為 0,換算到優先順序為 120。nice 值對應 -20~19,可通過 nice 值調整的優先順序範圍是 100~139,值越低優先順序別越高。

worker_shutdown_timeout time
worker_shutdown_timeout 5

設定 worker 子程式優雅退出時的超時時間,防止 worker 子程式被惡意干擾,再等待一段時間後若無會有則會斷開連線。
除上述主要引數之外,main 段引數還包括 user 與 pid。

user USERNAME [GROUP]
user nginx nginx;

設定執行 Nginx 的 worker 子程式屬主和屬組,通過語法可知,屬組可以不指定。

pid DIR
/usr/local/nginx/logs/nginx.pid;

設定執行 Nginx 的 master 主程式的 pid 檔案存放路徑。

配置完成後 main 段引數如下

user  nginx nginx;
worker_processes  auto;
timer_resolution 80ms;
worker_rlimit_nofile 50000;
worker_rlimit_core 80M;
working_directory /opt/nginx/core;
worker_cpu_affinity 0001 0010 0100 1000;
worker_priority -5;
worker_shutdown_timeout 3;
pid /opt/nginx/logs/nginx.pid;
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章