Quelle est la limite maximale du nombre de processus possibles dans un système Linux? Comment pouvons-nous le trouver?
Votre noyau devrait exporter cette information dans procfs
:
cat /proc/sys/kernel/pid_max
Il s'agit du nombre maximal d'identificateurs de processus uniques que votre système peut prendre en charge.
Comme il s’agit d’un fichier, /proc/sys/kernel/pid_max
peut être inspecté à partir de n’importe quel langage de programmation compatible.
sysctl kernel.pid_max
ou
cat/proc/sys/kernel/pid_max
Comme suggéré par Ninefingers.
Pour être complet, vous pouvez le modifier temporairement en écrivant dans/proc/syskernel/pid_max ou de manière permanente en ajoutant:
kernel.pid_max = 4194303
dans /etc/sysctl.conf. 4194303 est la limite maximale pour x86_64 et 32767 pour x86.
Réponse courte à votre question: Le nombre de processus possibles dans le système Linux estUNLIMITED.
Mais il y a une limite sur le nombre de processus par utilisateur (sauf root qui n'a pas de limite).
Et vous pouvez vérifier vos limites utilisateur avec la commande ci-dessous (applicable à "processus utilisateur maxi").
$ 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
Si vous souhaitez augmenter la limite de nombre de processus pour un utilisateur particulier (par exemple: hadoop), vous devez saisir une entrée inférieure à /etc/security/limits.conf
hadoop - nproc 500000
kernel.pid_max
est un facteur limitant, mais au moins aussi important est kernel.threads-max
. Il convient de noter que la valeur par défaut de nproc ulimit pour chaque utilisateur est kernel.threads-max
divisée par deux, et que chaque thread compte pour la limite de nproc d'un utilisateur. Ainsi, ps -u $USER
peut faire apparaître qu'un utilisateur n'a pas épuisé sa limite de nproc, mais ps -L -u $USER
pourrait raconter une histoire très différente.
Voulez-vous dire qu'un processus mongodb ne peut créer qu'avec max nproc = threads-max / 2
?
Parce que j'essaye d'augmenter nproc sans limite.
J'ai essayé de mettre des limites sur /etc/security/limits.conf
comme ceci:
mongodb soft nproc unlimited
mongodb hard nproc unlimited
mongodb soft nofile 50000
mongodb hard nofile 50000
mongodb soft sigpending unlimited
mongodb hard sigpending unlimited
Cependant, il n'a pas réfléchi au processus de mongodb même après le redémarrage complet.
Alors j'ai essayé de mettre la commande ulimit -u unlimited
à /etc/init.d/mongodb
mais après avoir essayé de commencer avec ce fichier, je me suis
/etc/init.d/mongodb: 67: ulimit: Illegal option -u
erreur. Ce kernel.threads-max
limite-t-il le nombre de processus mongodb max?