前言
在使用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) 15660
max locked memory (kbytes, -l) 65536
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) 15660
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
绝大多数情况下,都是因为open files太小的缘故,此处为1024,将其改大即可。
设置open files
临时设置,系统重启失效
使用ulimit -n命令即可,如
ulimit -n 8096
永久设置
对于首次设置,可直接使用如下命令。
echo 'root soft nofile 65535' >> /etc/security/limits.conf
echo 'root hard nofile 65535' >> /etc/security/limits.conf
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
也可以手动编辑limits.conf文件
vim /etc/security/limits.conf
加入如下内容
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
需要注意的是,root用户和普通用户需要单独设置,上述配置中,* 表示普通用户。
设置后重启生效。
设置系统最大打开文件数
除了对用户的设置,整个系统也有一个上限值,如果上述设置后,用户最大打开文件数仍未改变,或仍然出现too many open files错误,则需要检查系统最大打开文件数。
cat /proc/sys/fs/file-max
设置方法是编辑/etc/sysctl.conf文件
vim /etc/sysctl.conf
设置fs.file-max参数
fs.file-max = 2000000
让其生效
sysctl -p