nginx報錯:Too many open files ---NGINX性能優化

worker_processes與worker_connections 設置好合適大小,可以提示nginx處理性能,非常重要。
一般一個進程足夠了,你可以把連接數設得很大。(worker_processes: 1,worker_connections: 10,000)
如果有SSL、gzip這些比較消耗CPU的工作,而且是多核CPU的話,可以設爲和CPU的數量一樣。(worker_processes: CPU核心數)
或者要處理很多很多的小文件,而且文件總大小比內存大很多的時候,也可以把進程數增加,以充分利用IO帶寬(主要似乎是IO操作有block)

worker_processes,工作進程數
1.默認:worker_processes: 1
2.調大:worker_processes: CPU核心數,(雙核4線程,可以設置爲4)最好設爲auto,自動識別
worker_connections,單個工作進程可以允許同時建立外部連接的數量,數字越大,能同時處理的連接越多

1.默認:worker_connections: 1024
2.調大:worker_connections: 10240,(調大到10萬連接)
worker_connections解析
1.connections不是隨便設置的,而是與兩個指標有重要關聯,一是內存,二是操作系統級別的“進程最大可打開文件數”。
2.內存:每個連接數分別對應一個read_event、一個write_event事件,一個連接數大概佔用232字節,2個事件總佔用96字節,那麼一個連接總共佔用328字節,通過數學公式可以算出100000個連接數大概會佔用 31M = 100000 * 328 / 1024 / 1024,當然這只是nginx啓動時,connections連接數所佔用的nginx。
3.進程最大可打開文件數:進程最大可打開文件數受限於操作系統,可通過 ulimit -n 命令查詢,以前是1024,現在是65535,
nginx提供了worker_rlimit_nofile指令,這是除了ulimit的一種設置可用的描述符的方式。 該指令與使用ulimit對用戶的設置是同樣的效果。此指令的值將覆蓋ulimit的值,如:worker_rlimit_nofile 20960;
設置ulimits:ulimit -SHn 65535

worker_processes auto; 

#配置Nginx worker進程最大打開文件數
worker_rlimit_nofile 65535;    #添加的

events {
    #單個進程允許的客戶端最大連接數
    worker_connections  20480;
}


通過 ps -elf | grep nginx 找到 nginx 的worker進程ID
通過 cat /proc/31613/limits 查看,其中2291是worker進程ID,請注意其中的Max open files


關於max_clients的設置https://blog.51cto.com/liuqunying/1420556

從用戶的角度,http 1.1協議下,由於瀏覽器默認使用兩個併發連接,因此計算方法:

 

   nginx作爲http服務器的時候:

    max_clients = worker_processes * worker_connections/2

   nginx作爲反向代理服務器的時候:

    max_clients = worker_processes * worker_connections/4

 

或者從一般建立連接的角度:客戶併發連接爲1.

   nginx作爲http服務器的時候:

    max_clients = worker_processes * worker_connections

   nginx作爲反向代理服務器的時候:

    max_clients = worker_processes * worker_connections/2


————————————————
參考:

https://blog.csdn.net/zhuyu19911016520/article/details/90714429

https://blog.51cto.com/13673885/2299763

發佈了30 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章