nofile
尽管遵循了与此问题相关的每个 StackExchange 答案,但我似乎无法在 Ubuntu 14.04 上增加非 root 用户的限制。到目前为止,我有:
$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000
$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required pam_limits.so
/etc/pam.d/common-session-noninteractive:session required pam_limits.so
$ cat /proc/sys/fs/file-max
101232
Run Code Online (Sandbox Code Playgroud)
重新启动,登录,并且:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
对于非 root 用户,似乎仍然有最大 4096 的限制。
小智 13
使用 Ubuntu 14.04 我得到了描述的硬限制:
user@notebook:~$ ulimit -Hn 4096
Run Code Online (Sandbox Code Playgroud)
我可以使用 ulimit 降低它,但不能增加它,正如问题所描述的那样。正如 ulimit 的手册所描述的:
只有root可以增加硬限制
所以我试着/etc/security/limits.conf
像这样设置一个更高的限制:
user hard nofile 9999
Run Code Online (Sandbox Code Playgroud)
和一个新的登录像ssh localhost -l user
给了我新的限制:
user@notebook:~$ ulimit -Hn 9999
Run Code Online (Sandbox Code Playgroud)
希望这对你也有用。
小智 4
我认为这篇文章解决了您的问题。
基本上你应该使用 ulimit 命令来增加可用资源。
例如:
使用以下命令显示打开文件描述符的最大数量:
cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
要查看硬值和软值,请发出以下命令:
# ulimit -Hn
# ulimit -Sn
Run Code Online (Sandbox Code Playgroud)
要查看 httpd 或 oracle 用户的硬值和软值,请发出以下命令:
# su - username
Run Code Online (Sandbox Code Playgroud)
要修复最大文件数,您可以通过在内核变量 /proc/sys/fs/file-max 中设置新值来增加最大打开文件数,如下所示(以 root 身份登录):
# sysctl -w fs.file-max=100000
Run Code Online (Sandbox Code Playgroud)
上述命令强制限制为 100000 个文件。您需要编辑/etc/sysctl.conf
文件并添加以下行,以便重新启动后设置保持不变。为此,请附加一个配置指令,如下所示:
fs.file-max = 100000
Run Code Online (Sandbox Code Playgroud)
保存并关闭文件。用户需要注销并重新登录才能使更改生效,或者只需键入以下命令:
# sysctl -p
Run Code Online (Sandbox Code Playgroud)
使用命令验证您的设置:
# cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
或者:
# sysctl fs.file-max
Run Code Online (Sandbox Code Playgroud)
上述过程设置了系统范围的文件描述符 (FD) 限制,但是您可以通过编辑文件httpd
来将用户(或任何其他用户)限制到特定限制,并按如下方式设置限制:/etc/security/limits.conf
/etc/security/limits.conf
httpd soft nofile 4096
httpd hard nofile 10240
Run Code Online (Sandbox Code Playgroud)
然后通过以下方式检查它们:
# su - httpd
$ ulimit -Hn
$ ulimit -Sn
Run Code Online (Sandbox Code Playgroud)
如果您在其他 Linux 发行版上遇到问题,请检查/etc/pam.d/login
并确保您已pam_limits.so
启用,例如
session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)