最大打开文件数 - 如何修复too many open files报错?

ulimit 增大文件描述符

https://www.mongodb.com/docs/v4.2/reference/ulimit/

help ulimit
man limits.conf

[root@node1 ~]# 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) 15709
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) 15709
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


linux 打开文件数 too many open files 解决方法
设置用户open files(用户可以打开文件的最大数目):ulimit -n 4096。执行该命令非root用户只能设置到4096。想要设置到8192需要sudo权限或者root用户。

句柄修改参考最佳实践

1 系统配置文件设置
=================================
cat /etc/security/limits.conf
*                soft   nofile          655350
*                hard   nofile          655350

修改后新启动的服务,将立刻生效,已经运行中的服务保持不变


2 内核参数设置
=================================
sysctl -a | grep "fs.file-max"
echo 'fs.file-max = 6553600' >> /etc/sysctl.conf
sysctl --system


3 ulimit临时生效
=================================
ulimit -HSn 655350
(ulimit 是一个内核内置命令,没有绝对路径, help ulimit)


4 部分软件的特殊参数
=================================
如上1、2、3步骤是定义程序最大文件句柄(max open files),但是有些程序本身如果有特殊配置,如nginx worker_rlimit_nofile 是定义nginx worker process 最大使用的文件句柄,则以程序自定义为准


5 启动方式
=================================
5.1 脚本启动(centos6)
可以在启动脚本里增加一行 ulimit -HSn 655350

5.2 systemd管理(centos7)
可以在service文件增加一行 LimitNOFILE=102400

以上,再配合对关键进程的巡检 (cat /proc/${process_pid}/limits) ,即可妥善处理 too many open files 相关问题


6 关于生效方式
=================================
很多时候可能需要重启机器,才能重启