在 CentOS 上增加 ulimit

nwa*_*lke 18 centos ulimit

我们有一个 CentOS 机器,我试图增加用户可以打开的最大文件数。目前,当我跑步时,ulimit -Sn我得到1024ulimit -Hn给出4096. 我需要这个数字在 6000 左右。

/etc/sysctl.conf我设置fs.file-max = 100000. 在/etc/security/limits.conf我有以下设置:

username soft nofile 6000
username hard nofile 65535
Run Code Online (Sandbox Code Playgroud)

我已注销并重新登录,username但仍然没有看到我的更改。我需要什么才能改变这个值?

我所拥有的/etc/security/limits.d只是90-nproc.conf. 我还确保没有在我的 .bash_profile 或 .bashrc 中调用 ulimit。

当我运行sysctl -p它时,它会吐出我想要的设置,并显示我想要的值fs.file-max。但是当我运行时ulimit -Sn,我得到 1048。如果我尝试运行,sysctl --system我得到error: Unknown parameter "--system".

Xav*_*cas 14

强制/etc/sysctl.conf被读取再次运行sysctl -p

文件/etc/security/limits.conf由登录 shell 读取,如果在 GUI 中,您应该关闭活动会话窗口。对于远程登录,relog 生效。


Bos*_*coe 6

正如另一位海报所说,您需要让 sysctl 在正在运行的内核中设置该值。有几种方法可以在不重新启动的情况下设置该值:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system
Run Code Online (Sandbox Code Playgroud)

恕我直言,最后一种方法是最好的,因为它复制了在启动期间应用设置的顺序(因此,如果您有冲突,它就会变得明显)。

注意:我不确定您使用的是哪个版本的 CentOS,但至少在 7 上我遇到了一个问题,如果 dracut 出于任何原因(例如安装新内核模块时)重建 initramfs,它将复制将 /etc/sysctl.* 的内容写入 initramfs,然后在该阶段由 systemd-sysctl 执行,即使您稍后从 /etc/sysctl.conf 中删除了这些条目。

在我的环境中,我编辑了 systemd dracut 模块以从该环境中排除 /etc/sysctl.*(因为一旦安装了 rootfs 并且 systemd-sysctl 再次运行,这些设置就会被设置)。这只是一个你可能会遇到的问题。