如何在Ubuntu和Debian中增加打开文件数量的限制

时间:2019-05-19 01:26:31  来源:igfitidea点击:

有时我们会遇到Linux系统上 “打开的文件太多” Too many open files这样的问题。
这意味着我们的服务器已经达到了打开文件的最大限制。
这是因为系统为任何用户或会话设置了资源限制。
例如,创建的文件的最大大小、锁定在内存中的最大大小、使用的最大CPU时间、允许的最大进程数、可用虚拟内存的最大大小。

基本上有两种类型的限制:
一个 硬限制(hard limit)是一个用户或会话允许的最大限制,它是由超级用户/root设置的。
一个 软限制(soft limit)是用户或会话的当前有效值,可由用户增加到硬限制。

检查当前的限制

命令通过shell提供对每个用户可用资源的控制。
我们可以使用下面的命令来获取当前设置。

ulimit -a

要查看当前的硬限制或软限制,请使用以下命令。

ulimit -Sn       # Check soft limit
ulimit -Hn       # Check hard limit

提高当前会话的限制

大多数操作系统可以使用ulimit -n命令更改当前shell会话的打开文件限制:

ulimit -n 200000

增加每个用户的限制数量

可以在基于Debian的Linux系统上定义每个用户打开的文件限制。
要设置每个用户的限制,请在文本编辑器中编辑/etc/security/limits.conf文件。

sudo vim /etc/security/limits.conf

在文件中添加以下值:

* 	 soft     nproc          65535
* 	 hard     nproc          65535
* 	 soft     nofile         65535
* 	 hard     nofile         65535
Hyman 	 soft     nproc          200000
Hyman 	 hard     nproc          200000
Hyman 	 soft     nofile         200000
Hyman 	 hard     nofile         200000

在这里,我们为用户“Hyman”指定了单独的限制,即200000,而65535将应用于其他用户。
我们可以根据需求更改这些值。
然后启用pam_limits,如下所示:

sudo vim /etc/pam.d/common-session

添加以下行:

session required pam_limits.so

增加系统机的限制

我们还可以通过编辑sysctl配置文件来设置系统范围内的限制。
编辑sysctl.conf文件:

vim /etc/sysctl.conf

添加下面行:

fs.file-max = 2097152

然后运行以下命令应用上述更改:

sysctl -p

上述更改将增加可在系统范围内保持打开的文件的最大数量。
特定用户限制不能高于系统范围限制。