GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie unterscheiden sich ulimit -n und /proc/sys/fs/file-max?

Lösung 1:

file-max ist die maximale Dateideskriptorzahl (FD), die auf Kernelebene erzwungen wird und die nicht von allen Prozessen überschritten werden kann, ohne sie zu erhöhen. Die ulimit wird auf Prozessebene erzwungen, die kleiner als file-max sein kann .

Es besteht kein Risiko, die Leistung zu beeinträchtigen, wenn file-max erhöht wird . Bei modernen Distributionen ist die maximale FD ziemlich hoch eingestellt, während in der Vergangenheit eine Neukompilierung und Modifikation des Kernels erforderlich war, um über 1024 hinauszugehen. Ich würde nicht systemweit erhöhen, es sei denn, Sie haben eine technische Notwendigkeit.

Die prozessbezogene Konfiguration muss häufig für die Bereitstellung eines bestimmten Daemons optimiert werden, sei es eine Datenbank oder ein Webserver. Wenn Sie das Limit vollständig aufheben, könnte dieser Daemon möglicherweise alle verfügbaren Systemressourcen erschöpfen. Dies bedeutet, dass Sie das Problem nicht beheben können, außer durch Drücken der Reset-Taste oder Aus- und Wiedereinschalten. Natürlich führt beides wahrscheinlich zur Beschädigung aller geöffneten Dateien.

Lösung 2:

Die Beschränkung von ulimit gilt pro eindeutigem Benutzer. Benutzer1 wäre also, unabhängig davon, wie oft er sich angemeldet hat oder wie oft Prozesse ausgeführt werden, auf 1024 begrenzt. Es wird kombiniert.

Ich bin mir nicht sicher, ob ich die Bedeutung dieses Satzes vollständig verstehe (Englisch ist nicht meine Muttersprache). Wenn dieser Satz bedeutet, dass die ulimit-Konfiguration für Dateideskriptoren keine Pro-Prozess-Beschränkung ist, ist die akzeptierte Antwort (AFAIK) falsch. P>

Was ich meine ist, wenn ein Benutzer 4 Prozesse gestartet hat und die ulimit-Konfiguration für FDs 1024 ist, kann jeder Prozess 1024 FDs öffnen. Der Benutzer wird nicht auf 1024 FDs beschränkt, sondern auf die Prozesse, die von diesem Benutzer gestartet werden.

Zum Beispiel:

[email protected]:~$ ulimit -n
1024
[email protected]:~$ lsof | grep $USER | wc -l
8145

Hier ein Perl-Beispiel, wo wir das Limit erreichen (es ist ein Pro-Prozess-Limit):

#!/usr/bin/perl

$count = 0;
@filedescriptors;

while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}

Ergebnis:

FDs: 1021 Too many open files at ./test.pl line 8.

1021, weil es 3 offene Dateideskriptoren gab, bevor die While-Schleife erreicht wurde (stdout, stdin und stderr)

Tut mir leid, wenn ich komplett falsch liege oder die Antwort falsch verstanden habe.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux – Wie unterscheidet sich der /proc//exe Symlink von gewöhnlichen Symlinks?

  3. Linux – /proc/mnt mit /proc/mounts verknüpfen?

  4. Linux – Der Unterschied zwischen /sys/block/sda1/stat und /sys/block/xvda1/stat?

  5. Dev, Proc, Sys in einer Chroot-Umgebung mounten?

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wie unterscheiden sich SO_REUSEADDR und SO_REUSEPORT?

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

/sys/ Dokumentation?

Wie Linux /dev/tty und /dev/tty0 verwendet