如何解決Linux下Too many open files問題

引起的原因就是進程在某個時刻打開瞭超過系統限制的文件數量以及通訊鏈接數。 通過命令ulimit -a可以查看當前系統設置的最大句柄數是多少

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 31767

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 31767

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

可以看到,open files的配置是1024,可以通過如下命令將open files增加

ulimit -n 65535

這種修改方式可以臨時把文件打開數量增加到65535,但是系統重啟後這個配置會失效。

還有一種方式是修改系統的配置文件,以Ubuntu為例,配置文件默認在

/etc/security/limits.conf

在這個配置文件中增加

* soft nofile 65535* hard nofile 6553

如果要查看某個進程目前打開的句柄數量,可以通過如下命令:

lsof -p 進程ID|wc -l

此外,如果用supervisor托管和啟動項目,會遇到這個配置無法生效的問題,原因在於supervisor會默認配置打開的句柄數量是1024,

如果要查看某個進程最大open files,可以通過這個進程的進程號對應的limits查看

cat /proc/進程ID/limits

其中有一行是:

Max open files10241024bytes

supervisor托管的程序這一行默認都是supervisor配置的最大數量1024,這時需要手動改一下supervisor的配置文件,修改方式如下,以Ubuntu系統為例,找到supervisor的配置文件supervisord.conf

在[supervisord]選項中,增加minfds選項的配置

[supervisord]minfds=65535 ; min. avail startup file descriptors; default 1024

配置完畢後,需要重啟supervisor(以systemctl為例)

systemctl restart supervisor

即可生效

在通過:

cat /proc/進程號/limits

查看下對應進程的可open files的數量

Max open files6553565535bytes

以上就是如何解決Linux下Too many open files問題的詳細內容,更多關於解決Linux下Too many open files問題的資料請關註WalkonNet其它相關文章!

推薦閱讀: