在 CentOS Linux 版本 7.1.1503(Linux 内核版本 3.10.x)VM 上,我将以下几行添加到 /etc/security/limits.conf 和 /etc/security/limits.d/20-nproc.conf 中:
someuser soft nofile 8000
someuser hard nofile 8000
重新启动虚拟机后,ulimit -n
仍然报告4096,并且ulimit -n 8000
仍然导致“-bash: ulimit: open files:cannotmodifylimit:Operation not allowed”。
此时我对如何增加打开文件限制感到困惑。
答案1
该错误可能由于多种原因而发生。
首先,使用以下命令显示打开文件描述符的最大数量:
$ cat /proc/sys/fs/file-max
假设输出是 4096,这是什么意思?这意味着,普通用户可以在单次登录会话中打开 4096 个文件,您还可以使用以下命令通过检查其硬和软限制来显示它:
$ ulimit -Hn
$ ulimit -Sn
整个系统中同时打开的文件描述符的数量可以通过编辑来更改/etc/sysctl.conf
。您可以通过将系统范围的文件描述符限制设置为内核变量中的新值来增加打开文件的最大数量,如下/proc/sys/fs/file-max
所示:
$ sysctl -w fs.file-max=200000 #it forces the limit to 200000 files
然后您应该编辑/etc/sysctl.conf
文件,以便在重新启动后设置将保持如您所愿。为此,请添加以下行:
$ fs.file-max = 200000
无需注销并重新登录,只需输入:
$ sysctl -p
然后您可以通过以下方式验证更改:
$ cat /proc/sys/fs/file-max
OR
$ sysctl fs.file-max
然后,要更改用户的软限制和硬限制,最好以 root 身份登录,因为普通用户只能更改其软限制,硬限制由 root 管理。正如您所提到的,要以 root 身份执行此操作,您应该更改/etc/security/limits.conf
.例如,如果是 Oracle 用户:
oracle soft nofile 4096
oracle hard nofile 63536
要查看更改,您不需要重新启动,只需重新登录sudo -i
并检查它是否有效,这样您就可以确定问题所在。对于没有登录的用户,您应该以 root 身份执行以下操作:
$ sudo -i -u <user>
顺便说一句,您可能需要编辑 /etc/pam.d/login 文件并添加以下行:
$ session required pam_limits.so
pam_limit.so
在 /etc/pam.d/login 中表示登录时,但在 sudo 上没有,而在/etc/pam.d/sudo
不带“-i”的情况下运行 sudo 时也会应用限制,您可能还需要在 /etc/pam.d/system- 中应用上述更改根据您的需要进行授权。我建议您阅读有关 PAM 模块的内容。
顺便说一句,为了立即对当前正在运行的进程应用限制,除了更改之外,您还应该执行以下操作/etc/security/limits.conf
:
$ prlimit
我建议你读一下这篇文章文章来自红帽,因为您可能面临:
在某些 Linux 系统上,当您通过 SSH 以 oracle 用户身份登录时,以下示例中设置的“硬”和“软”限制可能无法正常工作。如果您以 root 身份登录并 su 到 oracle,则可能会起作用。如果您遇到此问题,请尝试在 /etc/ssh/sshd_config 中将 UsePrivilegeSeparation 设置为“no”,并通过执行 service sshd restart 重新启动 SSH 守护进程。在某些 Linux 系统上,权限分离无法与 PAM 一起正常工作。在禁用 SSH 安全功能“权限分离”之前,请务必与负责安全的人员联系。
我希望我能帮忙。祝你好运。
答案2
您可能需要检查某些用户的个人资料。当某个用户登录时。 profile 可以更改其 ulimit。要检查的文件: /etc/profile /etc/bashrc ~someuser/.bash_profile ~someuser/.bashrc