我们有一个 CentOS 盒子,我正在尝试增加用户可以打开的最大文件数。目前,当我运行时,ulimit -Sn
我得到1024
并ulimit -Hn
给出4096
。我需要这个数字达到 6000 左右。
在 中/etc/sysctl.conf
我已设置fs.file-max = 100000
。在 中/etc/security/limits.conf
我有以下设置:
username soft nofile 6000
username hard nofile 65535
我已注销并重新登录,username
但仍未看到我的更改。我需要做什么才能更改此值?
我所拥有的只是/etc/security/limits.d
。90-nproc.conf
我还确保了 ulimit 不会在我的 .bash_profile 或 .bashrc 中被调用。
当我运行它时,sysctl -p
它会输出我想要的设置,并显示fs.file-max
我想要的值。但是当我运行时ulimit -Sn
,我得到 1048。如果我尝试运行,sysctl --system
我会得到error: Unknown parameter "--system"
。
答案1
强制/etc/sysctl.conf
再次读取运行sysctl -p
。
文件/etc/security/limits.conf
由登录 shell 读取,如果在 GUI 中,您应该关闭活动会话窗口。对于远程登录,它在重新登录时生效。
答案2
正如另一位发帖者所说,您需要让 sysctl 在正在运行的内核中设置该值。有几种方法可以在不重新启动的情况下设置该值:
sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system
我认为最后一种方法是最好的,因为它复制了启动期间应用设置的顺序(因此如果有冲突就会变得明显)。
注意:我不确定您使用的是哪个版本的 CentOS,但至少在 7 上我遇到了一个问题,如果 dracut 出于任何原因(例如安装新的内核模块时)重建 initramfs,它会将 /etc/sysctl.* 的内容复制到 initramfs 中,然后由 systemd-sysctl 在该阶段执行,即使您后来从 /etc/sysctl.conf 中删除这些条目。
在我的环境中,我编辑了 systemd dracut 模块以从该环境中排除 /etc/sysctl.*(因为一旦 rootfs 挂载并且 systemd-sysctl 再次运行,这些设置就会被设置)。这只是您可能会遇到的一个问题。