修改 Nginx 程式最大可開啟檔案數(worker processes和worker connections)

這個看起來廋發表於2019-01-10
                     

worker_processes:作業系統啟動多少個工作程式執行Nginx。注意是工作程式,不是有多少個nginx工程。在Nginx執行的時候,會啟動兩種程式,一種是主程式master process;一種是工作程式worker process。例如我在配置檔案中將worker_processes設定為4,啟動Nginx後,使用程式檢視命令觀察名字叫做nginx的程式資訊,我會看到如下結果:

[root@localhost nginx]#  ps -elf | grep nginx4 S root       2203   2031  0  80   0 - 46881 wait   22:18 pts/0    00:00:00 su nginx4 S nginx      2204   2203  0  80   0 - 28877 wait   22:18 pts/0    00:00:00 bash5 S root       2252      1  0  80   0 - 11390 sigsus 22:20 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf5 S nobody     2291   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2292   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2293   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2294   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process0 R root       2312   2299  0  80   0 - 28166 -      22:24 pts/0    00:00:00 grep --color=auto nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

圖中可以看到1個nginx主程式,master process;還有四個工作程式,worker process。主程式負責監控埠,協調工作程式的工作狀態,分配工作任務,工作程式負責進行任務處理。一般這個引數要和作業系統的CPU核心數成倍數。

worker_connections:這個屬性是指單個工作程式可以允許同時建立外部連線的數量。無論這個連線是外部主動建立的,還是內部建立的。這裡需要注意的是,一個工作程式建立一個連線後,程式將開啟一個檔案副本。所以這個數量還受作業系統設定的,程式最大可開啟的檔案數有關

設定Nginx程式最大可開啟檔案數

1、更改作業系統級別的“程式最大可開啟檔案數”的設定

Linux問題—設定“程式最大可開啟的檔案數”永久有效的方式。

2、更改Nginx軟體級別的“程式最大可開啟檔案數”的設定

剛才更改的只是作業系統級別的“程式最大可開啟檔案”的限制,作為Nginx來說,我們還要對這個軟體進行更改。開啟nginx.conf主配置檔案。您需要配合worker_rlimit_nofile屬性。如下:

 

user root root; 
  worker_processes 4; 
  worker_rlimit_nofile 65535;

   

#error_log logs/error.log; 
  #error_log logs/error.log notice; 
  #error_log logs/error.log info;

   

#pid logs/nginx.pid; 
  events { 
          use epoll; 
          worker_connections 65535; 
  }

這裡只貼上了部分程式碼,其他的配置程式碼和主題無關,也就不需要貼上了。請注意程式碼行中加粗的兩個配置項,請一定兩個屬性全部配置。配置完成後,請通過nginx -s reload命令重新啟動Nginx

3、驗證Nginx的“程式最大可開啟檔案數”是否起作用

那麼我們如何來驗證配置是否起作用了呢?在linux系統中,所有的程式都會有一個臨時的核心配置檔案描述,存放路徑在 /pro/程式號/limit

首先我們來看一下,沒有進行引數優化前的程式配置資訊:

[root@localhost nginx]#  ps -elf | grep nginx4 S root       2203   2031  0  80   0 - 46881 wait   22:18 pts/0    00:00:00 su nginx4 S nginx      2204   2203  0  80   0 - 28877 wait   22:18 pts/0    00:00:00 bash5 S root       2252      1  0  80   0 - 11390 sigsus 22:20 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf5 S nobody     2291   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2292   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2293   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process5 S nobody     2294   2252  0  80   0 - 11498 ep_pol 22:23 ?        00:00:00 nginx: worker process0 R root       2318   2299  0  80   0 - 28166 -      22:42 pts/0    00:00:00 grep --color=auto nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

可以看到,nginx工作程式的程式號是:2291 2292 2293 2294。我們選擇一個程式,檢視其核心配置資訊:

[root@localhost nginx]# cat /proc/2291/limitsLimit                     Soft Limit           Hard Limit           UnitsMax cpu time              unlimited            unlimited            secondsMax file size             unlimited            unlimited            bytesMax data size             unlimited            unlimited            bytesMax stack size            8388608              unlimited            bytesMax core file size        0                    unlimited            bytesMax resident set          unlimited            unlimited            bytesMax processes             3829                 3829                 processesMax open files            1024                 4096                 filesMax locked memory         65536                65536                bytesMax address space         unlimited            unlimited            bytesMax file locks            unlimited            unlimited            locksMax pending signals       3829                 3829                 signalsMax msgqueue size         819200               819200               bytesMax nice priority         0                    0Max realtime priority     0                    0Max realtime timeout      unlimited            unlimited            us
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

請注意其中的Max open files ,分別是1024和4096。那麼更改配置資訊,並重啟Nginx後,配置資訊就是下圖所示了:

[root@localhost conf]# cat /proc/2351/limitsLimit                     Soft Limit           Hard Limit           UnitsMax cpu time              unlimited            unlimited            secondsMax file size             unlimited            unlimited            bytesMax data size             unlimited            unlimited            bytesMax stack size            8388608              unlimited            bytesMax core file size        0                    unlimited            bytesMax resident set          unlimited            unlimited            bytesMax processes             3829                 3829                 processesMax open files            65535                65535                filesMax locked memory         65536                65536                bytesMax address space         unlimited            unlimited            bytesMax file locks            unlimited            unlimited            locksMax pending signals       3829                 3829                 signalsMax msgqueue size         819200               819200               bytesMax nice priority         0                    0Max realtime priority     0                    0Max realtime timeout      unlimited            unlimited            us
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow

相關文章