修复 Linux 上的“打开文件过多”错误
每个 Linux 系统都对可以同时打开的文件数量施加一定的上限。如果超过此限制,您将遇到打开文件过多
错误。这是一项安全功能和故障保护功能,可以防止系统不堪重负,因为打开数千个文件通常是不必要的,并且表明程序已失控或恶意用户试图使系统崩溃。
根据管理员的判断,在某些情况下,系统可能会允许打开数千个文件,例如在一个拥有许多共享资源的用户的强大系统上。在本教程中,我们将向您展示如何修复 Linux 上的打开文件过多
错误。这涉及使用 ulimit 命令临时解除限制,或通过编辑 /etc/security/limits.conf
配置文件来永久允许同时打开更多文件。我们将在下面介绍这两种方法以及您需要了解的所有内容。
在本教程中您将学习:
如何检查一次允许打开多少个文件
如何使用
ulimit
命令设置文件的临时限制如何通过编辑
limits.conf
设置打开文件的永久限制
修复 Linux 上的“打开文件过多”错误 – 故障排除方法
当用户或进程尝试访问比系统当前允许的更多的文件描述符(文件和其他 I/O 资源的统称)时,就会出现“打开文件过多”错误。我们将执行以下一些步骤来确定系统的限制,对允许的打开文件数应用临时的新限制和永久的新限制。
当超出系统限制时,您将收到如下错误:
bash: command: Too many open files
警告
作为 Linux 管理员,您必须仔细决定要对系统施加的限制。如果可能,您应该只暂时解除限制,而不是进行永久性更改。允许一次打开太多文件将使您的系统容易受到攻击或有错误的程序的攻击,这些程序会尝试打开太多文件并最终耗尽系统资源。
首先,我们使用
ulimit
命令来检查系统允许同时打开的文件数量。我们可以使用-a
选项来查看此信息以及其他相关限制,或者使用-n
选项仅查看对打开文件数量的限制。$ ulimit -a OR $ ulimit -n
我们的输出显示我们的系统可以同时打开 1024 个文件。这是一个非常典型的默认配置,足以满足大多数单用户系统的需求。在共享服务器上,例如出租给虚拟专用服务器客户的服务器,此限制不会足够高。
要更改用户一次可以打开的文件数(文件描述符)的限制,请使用
-n
选项,后跟文件数。此命令将允许用户同时打开 2000 个文件。$ ulimit -n 2000
您知道吗?
使用ulimit
命令设置的所有限制将仅适用于当前的 Bash shell。要对系统范围内的使用进行永久更改,您必须对/etc/security/limits.conf
文件进行更改。接下来,让我们看看如何在
/etc/security/limits.conf
文件中永久更改系统范围内允许打开的文件数量。使用root权限打开文件;我们将在本例中使用 nano,但如果您愿意,也可以使用不同的文本编辑器。$ sudo nano /etc/security/limits.conf
在此文件的底部,我们将对用户施加一些硬性限制,这些限制是在系统范围内强制执行的。一般语法如下:
[domain] [type]
- [value]
[domain]
可以是用户名、组名或通配符(适用于所有人)。[type]
可以是“软”或“硬”,具体取决于您想要执行的限制类型。
是您想要限制的内容,在我们的例子中将是nofile
来配置文件描述符限制。[value]
是您想要强制执行的数字(允许打开的文件数)。所有这些信息都汇总在文件本身中,以防您忘记。
请注意,“软”限制和“硬”限制之间存在差异:硬限制只能通过根级别访问进一步提高,而任何进程都可以降低限制。这对于安全目的非常有用,因为非根进程将无法超越限制。给定进程可以随时更改软限制。
这是一个例子。我们将用户
linuxconfig
的打开文件限制为 2000 个。我们可以通过将以下行附加到文件末尾来实现此目的。linuxconfig hard nofile 2000
如果我们想限制整个组(例如
corporate
)的文件数量,我们将使用以下语法。这使得该组可以同时打开 5000 个文件。@corporate hard nofile 5000
使用 /etc/security/limits.conf 文件中描述的任何限制类型对整个系统上的用户、组或每个人进行限制。
完成文件编辑后,保存更改并退出以使新设置生效。
结束语
在本教程中,我们了解了如何修复 Linux 系统上的打开文件过多
错误。 Linux 对我们一次可以打开的文件数量施加了限制。这既是一项安全功能,也是一项额外措施,可确保资源不会轻易被有错误的进程或执行危险命令的用户淹没。您现在知道如何暂时或永久解除限制,因此请谨慎使用这些知识!