linux-出现了too many open files

前言

linux-出现了too many open files

linux系统对文件句柄数量是有限制的。一般是系统限制、用户限制和程序限制。


/proc/sys/fs/file-max

这个文件保存着当前系统的文件句柄的个数。这个是系统级别的限制,针对的是整个系统,并不是针对用户。

这个参数可以通过sysctl.conf进行配置:

fs.file-max = 1601172

linux-出现了too many open files


/etc/security/limits.conf

限制一个用户的所有shell能打开的最大数。

* soft nofile 65535

* hard nofile 65535

修改以后,需要重新登录终端才能生效。

linux-出现了too many open files


ulimit -n

控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。

查看已经启动程序的文件句柄限制

linux-出现了too many open files


查看已经启动程序的文件句柄限制

cat /proc/[pid]/limits

Limit Soft Limit Hard Limit Units

Max cpu time unlimited unlimited seconds

Max file size unlimited unlimited bytes

Max data size unlimited unlimited bytes

Max stack size 8388608 unlimited bytes

Max core file size unlimited unlimited bytes

Max resident set unlimited unlimited bytes

Max processes 62717 62717 processes

Max open files 1048576 1048576 files

Max locked memory 16777216 16777216 bytes

Max address space unlimited unlimited bytes

Max file locks unlimited unlimited locks

Max pending signals 62717 62717 signals

Max msgqueue size 819200 819200 bytes

Max nice priority 0 0

Max realtime priority 0 0

Max realtime timeout unlimited unlimited us


supervisor控制的程序

linux-出现了too many open files

CentOS上使用系统自带的supervisor,使用systemd启动supervisord的服务。被supervisor管理的程序,继承的是systemd对应的限制,如果需要修改的话,就需要在启动.service文件里面修改对应的限制

vim /usr/lib/systemd/system/supervisord.service

[Unit]

Description=Process Monitoring and Control Daemon

After=network.target

[Service]

Type=forking

LimitNOFILE=40960

LimitNPROC=40960

ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf

ExecReload=/usr/bin/supervisorctl reload

ExecStop=/usr/bin/supervisorctl shutdown

[Install]

WantedBy=multi-user.target


总结

现在很多的go语言程序也是直接使用systemd管理服务,所以也会涉及到文件句柄的限制,也是同样的解决方法。

¥38.9
购买

相关推荐