无需重启即可修改并应用 limits.conf

无需重启即可修改并应用 limits.conf

我添加了一行来/etc/security/limits.conf增加打开文件的数量。

*    hard nofile 4096
root hard nofile 16384

但是当我运行时,ulimit -n它显示 1024,这是默认值。我注销并登录后仍然看到 1024。我该如何应用更改?

答案1

如果您使用bashulimit -n则只会显示软限制。要获取硬限制,您需要执行ulimit -Hn

在我的系统上,我看到了这个:

$ ulimit -n
1024
$ ulimit -Hn
4096

答案2

命令所做的更改ulimit将立即应用无需重启(针对新流程)

$ ulimit -n 4096       # set soft limit
$ ulimit -Hn 16384     # set hard limit

prlimit命令(来自util-linuxDebian 上的包)可用于检查(或修改)限制值(对于当前 shell):

$ prlimit   
RESOURCE   DESCRIPTION                             SOFT      HARD UNITS
AS         address space limit                unlimited unlimited bytes
CORE       max core file size                         0 unlimited bytes
...

可以为每个进程配置限制,你可以使用以下命令进行检查:

cat /proc/<PID>/limits    # where <PID> is replaced by actual process ID
prlimit -p 4562           # or using prlimit

修改限制的语法如下:

prlimit -p <PID> --<resource>=<soft>:<hard>

设置进程打开的最大文件数4561

prlimit --pid 4561 --nofile=128051:256102

为了使这些更改永久生效,您必须/etc/security/limits.conf通过添加限制来进行修改:

* soft nofile 4096
* hard nofile 16384

但是,通配符*不适用于root用户。为了做到这一点,你必须明确说明:

* soft nofile 4096
* hard nofile 16384
root soft nofile 4096
root hard nofile 16384

这些限制将适用创建新会话后(当然是在重启之后)。使用以下方式切换到另一个用户su或通过以下方式登录ssh并检查更新的限制:

su - myuser
ulimit -Sa
ulimit -Ha

笔记:通常某些服务会耗尽资源,请务必检查进程级别的限制(为root用户提供尽可能大的值并不是解决方案)。如果配置的值/etc/security/limits.conf太大(内核不支持),则将使用默认值。

systemd系统有/etc/systemd/user.conf/etc/systemd/user.conf.d/*.conf针对用户特定值)配置,可以覆盖每个用户的限制:

[Manager]
DefaultLimitAS=4G:16G
DefaultLimitNOFILE=1048576

还有/etc/systemd/system.conf系统范围的配置。

一些较旧的发行版在立即应用限制时存在问题,修改/etc/pam.d/common-session/etc/pam.d/login会有所帮助。这通常没有必要:

session required pam_limits.so

/var/log/auth.log当您在应用限制时遇到问题时,请务必先检查。

相关内容