Linux 中增加最大打开文件数
如果您在使用 Linux,那么您一定多次遇到过 **“打开的文件太多 (24)”** 错误。Linux 操作系统提供了一种限制每个用户可以使用的文件数量的方法。本文提供了有关如何在 Linux 操作系统中增加打开文件数或文件描述符数量的见解。
ulimit 命令可以控制 shell 或进程,并且需要 **以 root 用户身份登录**。**ulimit** 命令用于设置仅适用于您当前会话的文件限制。
使用以下命令显示最大打开文件描述符数量 -
# cat /proc/sys/fs/file-max 801841
在上述命令中,用户在一个登录会话中可以打开 **801841** 个文件。要查看文件描述符的硬限制和软限制,请使用以下命令 -
文件描述符的硬限制
硬限制值只能由 root 用户修改。非 root 用户无法超过硬限制。
我们可以使用以下命令检查硬限制 -
$ ulimit -Hn 4096
在上述命令中,“H”选项表示硬限制,“n”表示文件数量。
文件描述符的软限制
软限制值可以随时由用户进程修改。它用于禁用核心转储。
我们可以使用以下命令检查硬限制 -
$ ulimit -Sn 1024
在上述命令中,“S”选项表示软限制,“n”表示文件数量。
修复“打开的文件太多”错误
可以通过在内核变量 /proc/sys/fs/file-max 中设置新值来增加最大打开文件数,如下所示 -
$ sysctl -w fs.file-max=100000 fs.file-max = 100000
上述命令将最大打开文件限制强制设置为 **100000**,并且此设置适用于特定会话。如果您希望将此值设置为永久生效,则需要编辑 /etc/sysctl.conf 文件并添加以下行 -
$ vi /etc/sysctl.conf
示例输出应如下所示 -
........ # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 #fs.file-max = 50000
将 file-max 值替换为 **100000** 并保存。用户需要注销并重新登录才能使更改生效,或者只需键入以下命令 -
$ sysctl -p
要进行验证,请使用以下命令 -
$ cat /proc/sys/fs/file-max
示例输出应如下所示 -
$ cat /proc/sys/fs/file-max 100000
用户级文件描述符限制
上述过程描述了系统级文件描述符限制。但是,我们可以设置用户级文件描述符限制。要指定用户级文件描述符限制,您可以通过编辑 /etc/security/limits.conf 文件来实现。
要编辑文件,请使用以下命令 -
$ vi /etc/security/limits.conf
示例输出应如下所示 -
..... #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #ftp - chroot /ftp #@student - maxlogins 4
将以下行添加到 limits.conf 文件 -
#tp soft nofile 4096 #tp hard nofile 10240
这里 **tp** 是系统用户的用户名。保存并关闭文件。要查看限制,请使用上面显示的 ulimits 命令。
恭喜!现在,您知道“如何增加最大打开文件数或文件描述符”。我们将在下一篇 Linux 文章中学习更多关于此类命令的知识。继续关注!