Quelle est la limite maximale du nombre de processus possible dans un système linux ? Comment la trouver ?
Réponses
Trop de publicités?Votre noyau devrait exporter cette information dans procfs
:
cat /proc/sys/kernel/pid_max
Il s'agit du nombre maximal d'identifiants de processus uniques que votre système peut prendre en charge.
Puisqu'il s'agit d'un fichier, /proc/sys/kernel/pid_max
peut être inspecté à partir de n'importe quel langage de programmation capable.
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 façon permanente en ajoutant :
kernel.pid_max = 4194303
dans le fichier /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 est le suivant ILLIMITÉE .
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 d'utilisateur avec la commande ci-dessous (apparentée à "max user processes").
$ 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 voulez augmenter la limite du nombre de processus pour un utilisateur particulier (par exemple : hadoop), vous devez faire l'entrée suivante dans le champ /etc/security/limits.conf
hadoop - nproc 500000
kernel.pid_max
est un facteur limitant, mais au moins aussi important, il y a kernel.threads-max
. Il est intéressant de noter que l'ulimit par défaut de nproc pour chaque utilisateur est de kernel.threads-max
divisé par deux, et que chaque thread compte dans la limite de nproc d'un utilisateur. Ainsi, ps -u $USER
peut donner l'impression 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 l'option max nproc = threads-max / 2
?
Parce que j'essaie d'augmenter nproc de manière illimitée.
J'ai essayé de mettre des limites sur /etc/security/limits.conf
comme ça : 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, cela ne s'est pas reflété sur le processus mongodb, même après un redémarrage complet.
Puis j'ai essayé de mettre ulimit -u unlimited
pour /etc/init.d/mongodb
mais après avoir essayé de démarrer avec ce fichier, j'ai obtenu
/etc/init.d/mongodb: 67: ulimit: Illegal option -u
erreur. Est-ce que c'est kernel.threads-max
limite le nombre de processus maximum de mongodb ?