我添加了一行来/etc/security/limits.conf
增加打开文件的数量。
* hard nofile 4096
root hard nofile 16384
但是当我运行时,ulimit -n
它显示 1024,这是默认值。我注销并登录后仍然看到 1024。我该如何应用更改?
答案1
如果您使用bash
,ulimit -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-linux
Debian 上的包)可用于检查(或修改)限制值(对于当前 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
当您在应用限制时遇到问题时,请务必先检查。