Was ist die maximale Anzahl von Prozessen, die in einem Linux-System möglich sind? Wie können wir es finden?
Ihr Kernel sollte diese Informationen in procfs
exportieren:
cat /proc/sys/kernel/pid_max
Dies ist die maximale Anzahl eindeutiger Prozesskennungen, die Ihr System unterstützen kann.
Da es sich um eine Datei handelt, kann /proc/sys/kernel/pid_max
von jeder beliebigen Programmiersprache aus geprüft werden.
sysctl kernel.pid_max
oder
cat/proc/sys/kernel/pid_max
Wie von Neunfingern vorgeschlagen.
Der Vollständigkeit halber können Sie es vorübergehend ändern, indem Sie in/proc/syskernel/pid_max schreiben, oder indem Sie Folgendes hinzufügen:
kernel.pid_max = 4194303
zu /etc/sysctl.conf. 4194303 ist die Höchstgrenze für x86_64 und 32767 für x86.
Kurze Antwort auf Ihre Frage: Die Anzahl der möglichen Prozesse im Linux-System istUNLIMITED.
Es gibt jedoch eine Begrenzung für die Anzahl der Prozesse pro Benutzer (außer root, der keine Begrenzung hat).
Und Sie können Ihre Benutzergrenzen mit dem folgenden Befehl überprüfen (neben "max. Benutzerprozesse").
$ 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) 256447
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 128000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 500000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Wenn Sie die Begrenzung der Prozessanzahl für einen bestimmten Benutzer erhöhen möchten (z. B. hadoop), müssen Sie einen Eintrag in /etc/security/limits.conf machen.
hadoop - nproc 500000
kernel.pid_max
ist ein limitierender Faktor, mindestens ebenso wichtig ist kernel.threads-max
. Es ist erwähnenswert, dass der Standardwert für nproc ulimit für jeden Benutzer kernel.threads-max
durch zwei geteilt ist und dass jeder Thread zum nproc-Grenzwert eines Benutzers zählt. Daher kann ps -u $USER
den Anschein erwecken, dass ein Benutzer seine nproc-Grenze nicht erschöpft hat, ps -L -u $USER
könnte jedoch eine ganz andere Geschichte erzählen.
Meinten Sie, dass ein Mongodb-Prozess nur mit max nproc = threads-max / 2
erstellt werden kann?
Weil ich versuche, nproc als unbegrenzt zu erhöhen.
Ich habe versucht, /etc/security/limits.conf
wie folgt zu begrenzen:
mongodb soft nproc unlimited
mongodb hard nproc unlimited
mongodb soft nofile 50000
mongodb hard nofile 50000
mongodb soft sigpending unlimited
mongodb hard sigpending unlimited
Allerdings wurde der mongodb-Prozess auch nach einem Neustart nicht berücksichtigt.
Dann habe ich versucht, ulimit -u unlimited
Befehl auf /etc/init.d/mongodb
zu setzen, aber nachdem ich versucht hatte, mit dieser Datei zu beginnen, bekam ich
/etc/init.d/mongodb: 67: ulimit: Illegal option -u
error. Ist dieser kernel.threads-max
die maximale Anzahl an Prozessen für mongodb?