尽管我关注了与此问题相关的每个 StackExchange 答案,但我似乎无法增加nofile
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
重新启动、登录并且:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
那里仍然对于非root用户来说,最大限制似乎为4096。
答案1
使用 Ubuntu 14.04 我得到了所描述的硬限制:
user@notebook:~$ ulimit -Hn 4096
我可以使用 ulimit 降低它,但不能增加它,就像问题描述的那样。正如 ulimit 的手册所述:
只有 root 可以增加硬限制
/etc/security/limits.conf
因此我尝试像这样 设置一个更高的限制:
user hard nofile 9999
并且新的登录ssh localhost -l user
给了我新的限制:
user@notebook:~$ ulimit -Hn 9999
希望这对你也有用。
答案2
这文章,我认为这解决了您的问题。
基本上,您应该使用 ulimit 命令来增加可用资源。
例如:
使用以下命令显示最大打开文件描述符的数量:
cat /proc/sys/fs/file-max
要查看硬值和软值,请发出以下命令:
# ulimit -Hn
# ulimit -Sn
要查看 httpd 或 oracle 用户的硬值和软值,请发出以下命令:
# su - username
要修复最大文件数,您可以通过在内核变量 /proc/sys/fs/file-max 中设置新值来增加打开文件的最大数量,如下所示(以 root 身份登录):
# sysctl -w fs.file-max=100000
上述命令强制将文件数量限制为 100000 个。您需要编辑/etc/sysctl.conf
文件并添加以下行,以便在重启后设置保持不变。为此,请附加一个配置指令,如下所示:
fs.file-max = 100000
保存并关闭文件。用户需要注销并重新登录以使更改生效,或者只需输入以下命令:
# sysctl -p
使用命令验证您的设置:
# cat /proc/sys/fs/file-max
或者:
# sysctl fs.file-max
上述过程设置了系统范围的文件描述符 (FD) 限制,但是您可以通过编辑文件来限制httpd
用户(或任何其他用户)的特定限制,并按如下方式设置限制:/etc/security/limits.conf
/etc/security/limits.conf
httpd soft nofile 4096
httpd hard nofile 10240
然后通过以下方式检查:
# su - httpd
$ ulimit -Hn
$ ulimit -Sn
如果你在其他 Linux 发行版上也遇到此问题,请检查/etc/pam.d/login
并确保已pam_limits.so
启用,例如
session required pam_limits.so
答案3
如果是服务,可以尝试在/etc/systemd/system/{ServiceName}.service
添加中设置限制LimitNOFILE=65536