1. 程式人生 > 實用技巧 >nginx效能調優一(worker_processes、worker_cpu_affinity引數配置)

nginx效能調優一(worker_processes、worker_cpu_affinity引數配置)

Nginx worker 程序個數

語法:worker_processes number;
預設:worker_processes 1;
worker 程序的數量會直接影響效能,那麼,使用者配置多少個 worker 程序才好呢?這實
際上與業務需求有關。
每個 worker 程序都是單執行緒的程序,它們會呼叫各個模組以實現多種多樣的功能。如
果這些模組確認不會出現阻塞式的呼叫,那麼,有多少 CPU 核心就應該配置多少個程序;反 之,如果有可能出現阻塞式呼叫,那麼需要配置稍多一些的 worker 程序。

檢視CPU核數:cat /proc/cpuinfo |grep "cores"|uniq或者:top命令後 按1

並用worker_cpu_affinity 配置來繫結 CPU 核心

為什麼要繫結 worker 程序到指定的 CPU 核心呢 ?假定每一個 worker 程序都是非常繁忙的 ,如果多個 worker 程序都在搶同一個 CPU ,那麼這就會出現同步問題。反之 ,如果每一 個 worker 程序都獨享一個 CPU,就在核心的排程策略上實現了完全的併發。

例如:

2個CPU核心
worker_processes 2;
worker_cpu_affinity 01 10;

4個CPU核心

worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;

8個CUP核心

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

worker_cpu_affinity補充

nginx預設是沒有開啟利用多核cpu的配置的。需要通過增加worker_cpu_affinity配置引數來充分利用多核cpu,cpu是任務處理,當計算最費時的資源的時候,cpu核使用上的越多,效能就越好。

配置nginx多核cpu,worker_cpu_affinity使用方法和範例

2核cpu,開啟2個程序

worker_processes 2;
worker_cpu_affinity 01 10;

解釋:01表示啟用第一個CPU核心,10表示啟用第二個CPU核心

worker_cpu_affinity 01 10;表示開啟兩個程序,第一個程序對應著第一個CPU核心,第二個程序對應著第二個CPU核心。

2核cpu,開啟4個程序

worker_processes 4;
worker_cpu_affinity 01 10 01 10;

解釋:開啟了四個程序,它們分別對應著開啟2個CPU核心

4個cpu,開啟4個程序

worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

解釋:0001表示啟用第一個CPU核心,0010表示啟用第二個CPU核心,依此類推

4核cpu,開啟2個程序

worker_processes 2;
worker_cpu_affinity 0101 1010;

解釋:0101表示開啟第一個和第三個核心,1010表示開啟第二個和第四個核心;2個程序對應著四個核心;worker_cpu_affinity配置是寫在/etc/nginx/nginx.conf裡面的;2核是 01,四核是0001,8核是00000001,有多少個核,就有幾位數,1表示該核心開啟,0表示該核心關閉。

8核cpu,開啟8個程序

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

解釋:0001表示啟用第一個CPU核心,0010表示啟用第二個CPU核心,依此類推;worker_processes最多開啟8個,8個以上效能提升不會再提升了,而且穩定性變得更低,所以8個程序夠用了。

配置完之後可以重啟nginx,用ab工具或者wrk工具,可以進行效能測試,在伺服器上執行top,然後按1,就可以看到cpu工作情況,如果多個cpu核心的利用率差不多,就證明nginx已經成功利用了多核cpu,測試結束後,cpu核心的負載都同時降低。

參考:

  1、https://blog.csdn.net/liuxiaoming1109/article/details/80989722

  2、https://blog.csdn.net/u011957758/article/details/50959823

Nginx worker 程序個數

語法:worker_processes number;
預設:worker_processes 1;
worker 程序的數量會直接影響效能,那麼,使用者配置多少個 worker 程序才好呢?這實
際上與業務需求有關。
每個 worker 程序都是單執行緒的程序,它們會呼叫各個模組以實現多種多樣的功能。如
果這些模組確認不會出現阻塞式的呼叫,那麼,有多少 CPU 核心就應該配置多少個程序;反 之,如果有可能出現阻塞式呼叫,那麼需要配置稍多一些的 worker 程序。