OpenBSD 对文件描述符的数量有限制吗?

cns*_*nst 8 openbsd file-descriptors limit

一个进程可以在 OpenBSD 上成功获得的最大文件描述符数是多少?

例如,OpenBSDopenfiles中的login.conf(5)有一个限制。如果我想拥有尽可能多的文件描述符,但仍然不要让失控的进程使系统陷入困境,那么设置什么值是合理的?

例如,如果我指定,例如,20000内核是否能够为我的应用程序提供所有这些 20000 个 FD?如果我正在运行给定应用程序的多个实例(例如多个工作进程)怎么办?

小智 6

查看源代码,获取最大打开文件的默认值:

有据可查的代码

extern int maxfiles;                 /* kernel limit on number of open files */
Run Code Online (Sandbox Code Playgroud)

maxfiles,在 param.c 上定义了maxfiles的公式

int maxfiles = 5 * (NPROCESS + MAXUSERS) + 80;
Run Code Online (Sandbox Code Playgroud)

好的,我们找到了。

进程 =

#define NPROCESS (30 + 16 * MAXUSERS)
Run Code Online (Sandbox Code Playgroud)

MAXUSERS = - 让我们以 amd64 架构为例:

machine         amd64
include         "../../../conf/GENERIC"
maxusers        80                      # estimated number of users
Run Code Online (Sandbox Code Playgroud)

让我们总结一下所有的东西:

maxfiles = 5 * ((30 + 16 * 80) + 80) + 80
maxfiles = 5 * ((30 + 1280) + 80) + 80
maxfiles = 5 * (1390) + 80
maxfiles = 6950 + 80
maxfiles = 7030
Run Code Online (Sandbox Code Playgroud)

要增加最大打开文件的总数,您首先需要增加最大打开文件内核限制sysctl kern.maxfiles=20000并增加进程/用户可以打开的文件数量,编辑login.conf. 这个Tor 守护进程设置为您提供了两个示例。


sam*_*ler 4

默认值很有可能已经设置为合理的值,这些值将支持大多数(如果不是全部)用例,它们将基于 OpenBSD 开发人员和管理员多年来开发和使用的运行系统所需的值。用法。我相信任何限制都会以编程方式强制执行,并且只能真正受到可用资源的限制。

在 FreeBSD 上,我们有kern.maxfiles和 的sysctl 值kern.maxfilesperproc- 我希望 OpenBSD 也有相同的值。当前的默认限制比几年前要高得多,因为大多数系统现在都有足够的资源,我们不需要限制它们。

在我的台式机上,我的 maxfilesperproc 默认为 18000 - 我正在运行 xfce4,并运行 chrome、liferea、blender、gimp、文本编辑器和终端 - ps 显示 215 个进程,kern.openfiles 为 2683

如果您从太多打开的文件中收到错误,请增加它们,但我怀疑您是否需要这样做,并且我怀疑您将它们增加得太高会使系统超载。