什么是安全的 ulimit 上限?

the*_*cer 7 server filesystem ulimit

这是输出 ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Run Code Online (Sandbox Code Playgroud)

这是一个 64 位安装,我想将最大打开文件从 1024 增加到更令人兴奋的限制,例如 5000。这有什么问题吗?会不会造成不稳定?

谢谢。

Oll*_*lli 4

max-open 是一个用户可以在单个会话中同时打开的文件数。

另请注意,所有限制设置都是在每次登录时设置的。它们不是全球性的,也不是永久性的;仅在会话期间存在。

(来自 man limit.conf(5))

最大数量的安全值实际上取决于您的使用情况。使用默认值的目的是为了防止轻微(意外)拒绝服务。打开文件的数量也有全局限制:

cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)

您可以通过运行来更改该数字,例如

echo 100000 > /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)

(显然是使用 root 用户)。更好的是还添加行fs.file-max = 10000/etc/sysctl.conf在重新启动后加载相同的设置。


从 ulimit 开始:增加该数字是安全的。但是,打开文件的数量不应超过全局文件最大数量,因为这样就不再可能打开新文件(例如登录需要打开文件)。

如果有多个用户,请记住,如果更改默认值,每个人都可以打开更多文件。例如,30 个用户 * 5000 个文件 = 150 000 个打开的文件(假设每个人都打开最大数量的文件,并且仅使用单个会话)。如果您有一些由多个用户使用的真正资源匮乏(例如打开很多文件)的软件,这可能是一个问题。