Werden limits.conf-Werte pro Prozess angewendet?

25

Ich stelle den nofileWert /etc/security/limits.conffür meinen Oracle-Benutzer ein und habe eine Frage zu dessen Verhalten: nofileBeschränkt die Gesamtzahl der Dateien, die der Benutzer für alle Prozesse öffnen kann , oder die Gesamtzahl der Dateien, die der Benutzer haben kann offen für jeden seiner Prozesse?

Insbesondere für die folgende Verwendung:

oracle                  hard    nofile                  65536
Christopher Neylan
quelle

Antworten:

23

Die meisten Werte¹ in limits.confsind Grenzwerte, die mit dem ulimitShell-Befehl oder dem setrlimitSystemaufruf festgelegt werden können. Sie sind Eigenschaften eines Prozesses. Die Grenzwerte gelten für jeden Prozess unabhängig. Insbesondere kann jeder Prozess bis zu nofilegeöffnete Dateien enthalten. Die Anzahl der offenen Dateien, die von den Prozessen eines Benutzers kumuliert werden, ist unbegrenzt.

Das nprocLimit ist insofern ein Sonderfall, als es sich über alle Prozesse eines Benutzers summiert. Es gilt jedoch weiterhin pro Prozess: Wenn ein Prozess forkzum Erstellen eines neuen Prozesses aufruft , wird der Aufruf verweigert, wenn die Anzahl der Prozesse, die zur euid des Prozesses gehören, größer ist als der RLIMIT_NPROCWert des Prozesses .

In der limits.confManpage wird erklärt, dass die Grenzwerte für eine Sitzung gelten. Dies bedeutet, dass alle Prozesse in einer Sitzung dieselben Grenzwerte haben (sofern sie nicht durch einen dieser Prozesse geändert werden). Dies bedeutet nicht, dass eine Summe über die Prozesse in einer Sitzung erstellt wird (das verfolgt das Betriebssystem nicht einmal - es gibt eine Vorstellung von Sitzung, aber es ist feiner abgestuft, z. B. neigt jede X11-Anwendung dazu, zu beenden in seiner eigenen Sitzung). Die Art und Weise, wie dies funktioniert, besteht darin, dass der Anmeldevorgang selbst einige Grenzen setzt und diese von allen untergeordneten Prozessen übernommen werden.

¹ Die Ausnahmen sind maxlogins, maxsysloginsund chroot, die als Teil des Login - Prozesses angewandt werden , zu verweigern oder zu beeinflussen Anmeldung.

Gilles 'SO - hör auf böse zu sein'
quelle
Bedeutet das umgekehrt, dass unterschiedliche Sitzungen unterschiedliche Grenzwerte haben können?
CMCDragonkai
1
@CMCDragonkai Ja, zum Beispiel, wenn limit.confzwischen den Zeiten, in denen die Sitzungen geöffnet waren, Änderungen vorgenommen wurden, oder wenn andere Grenzwerte (die mit Ausnahme von root kleiner sein müssten) festgelegt wurden .profile.
Gilles 'SO - hör auf böse zu sein'
1
@laimison Wenn Sie alle laufenden Prozesse durchlaufen und prlimit --pid $pidauf jedem Prozess ausgeführt werden, können Sie das Limit für eine aktive Sitzung effektiv ändern. Beachten Sie, dass Sie dies möglicherweise einige Male tun müssen, wenn einige Prozesse während des Iterierens unterbrochen werden.
Gilles 'SO - hör auf böse zu sein'
1
Angenommen, ein Benutzer hat nur zwei Prozesse A und B, wobei RLIMIT_NPROCA auf 2 und B auf 3 gesetzt ist. Dann kann B einen weiteren Prozess verzweigen , A jedoch nicht.
Gilles 'SO - hör auf böse zu sein'
1
@laimison Wenn Sie das Limit in Bs übergeordnetem Element auf 2 setzen und es nach dem Gabeln nicht in B ändern, beträgt das Limit in B 2. Wenn Sie das Limit in Bs übergeordnetem Element auf 2 setzen, aber das Limit in B erhöhen, oder wenn Wenn Sie in Bs übergeordnetem Element vor dem Gabeln von B den Grenzwert auf 3 und nach dem Gabeln von B auf 2 setzen, wird für B der Grenzwert auf 3 festgelegt. Der einzige wichtige Grenzwert ist derjenige im Prozess, der fork () aufruft, nicht der Grenzwert in dem übergeordneten Prozess oder in einem anderen Prozess.
Gilles 'SO - hör auf böse zu sein'