Hat OpenBSD eine Begrenzung für die Anzahl der Dateideskriptoren?

7

Was ist die maximale Anzahl von Dateideskriptoren, die ein Prozess erfolgreich auf OpenBSD erhalten kann?

Beispielsweise gibt es openfilesin login.conf (5) in OpenBSD ein Limit . Wenn ich so viele Dateideskriptoren wie möglich haben möchte, aber dennoch nicht zulasse, dass ein außer Kontrolle geratener Prozess das System blockiert, was wäre ein sinnvoller Wert?

Wenn ich beispielsweise spezifiziere, 20000kann der Kernel meiner Anwendung alle diese 20000 FDs geben? Was ist, wenn ich mehrere Instanzen einer bestimmten Anwendung ausführe (z. B. mehrere Worker-Prozesse)?

cnst
quelle

Antworten:

5

Sehen Sie sich den Quellcode an, um den Standardwert für maximal geöffnete Dateien zu erhalten:

Gut dokumentierter Code

extern int maxfiles;                 /* kernel limit on number of open files */

maxfiles definiert auf param.c die Formel für maxfiles

int maxfiles = 5 * (NPROCESS + MAXUSERS) + 80;

OK, wir haben es gefunden.

NPROCESS =

#define NPROCESS (30 + 16 * MAXUSERS)

MAXUSERS = - Nehmen wir als Beispiel die amd64-Architektur:

machine         amd64
include         "../../../conf/GENERIC"
maxusers        80                      # estimated number of users

Fassen wir alles zusammen:

maxfiles = 5 * ((30 + 16 * 80) + 80) + 80
maxfiles = 5 * ((30 + 1280) + 80) + 80
maxfiles = 5 * (1390) + 80
maxfiles = 6950 + 80
maxfiles = 7030

Um die Gesamtzahl der maximal geöffneten Dateien zu erhöhen, müssen Sie zunächst das maximale Kernellimit für geöffnete Dateien sysctl kern.maxfiles=20000erhöhen und die Anzahl der Dateien erhöhen, die ein Prozess / Benutzer öffnen und bearbeiten kann login.conf. Dieses Tor-Daemon-Setup enthält beide Beispiele für Sie.


quelle
4

Es besteht eine gute Chance, dass die Standardwerte bereits auf vernünftige Werte festgelegt sind, die die meisten, wenn nicht alle Anwendungsfälle unterstützen. Sie basieren auf Werten, die von laufenden Systemen benötigt werden, die von den OpenBSD-Entwicklern und -Admins im Laufe der Entwicklungsjahre verwendet wurden Verwendungszweck. Ich glaube, dass alle Grenzen programmatisch durchgesetzt und nur durch die verfügbaren Ressourcen wirklich begrenzt werden.

Auf FreeBSD haben wir sysctl-Werte für kern.maxfilesund kern.maxfilesperproc- ich erwarte, dass OpenBSD dieselben hat. Die aktuellen Standardlimits sind viel höher als noch vor wenigen Jahren, da die meisten Systeme jetzt über genügend Ressourcen verfügen, sodass wir sie nicht mehr einschränken müssen.

Auf meinem Desktop-Computer habe ich maxfilesperproc auf dem Standardwert 18000 - ich verwende xfce4 mit Chrome, Liferea, Blender, Gimp, Texteditoren und Terminals - ps zeigt 215 Prozesse und kern.openfiles ist bei 2683

Wenn Sie Fehler von zu vielen geöffneten Dateien erhalten, erhöhen Sie diese, aber ich bezweifle, dass Sie dies benötigen würden, und ich bezweifle, dass Sie Ihr System überlasten werden, indem Sie sie zu hoch erhöhen.

Sambler
quelle
Leider ist in openbsd openfiles-maxunter daemon:1024 eingestellt, was für ein Tor-Relais nicht aus der Ferne ausreicht. Dies muss auf einen höheren Wert erhöht werden, z. B. 13500, wie in der Anleitung zur Einrichtung des Tor-Relais angegeben.
Hygri