GNU/Linux >> Tutoriels Linux >  >> Linux

Nombre maximum de threads par processus sous Linux ?

Linux n'a pas de threads distincts par limite de processus, juste une limite sur le nombre total de processus sur le système (les threads ne sont essentiellement que des processus avec un espace d'adressage partagé sous Linux) que vous pouvez afficher comme ceci :

cat /proc/sys/kernel/threads-max

La valeur par défaut est le nombre de pages mémoire/4. Vous pouvez augmenter cela comme :

echo 100000 > /proc/sys/kernel/threads-max

Il existe également une limite au nombre de processus (et donc de threads) qu'un seul utilisateur peut créer, voir ulimit/getrlimit pour plus de détails concernant ces limites.


C'est FAUX de dire que LINUX n'a ​​pas de threads séparés par limite de processus.

Linux implémente indirectement le nombre maximum de threads par processus !!

number of threads = total virtual memory / (stack size*1024*1024)

Ainsi, le nombre de threads par processus peut être augmenté en augmentant la mémoire virtuelle totale ou en diminuant la taille de la pile. Cependant, une trop grande diminution de la taille de la pile peut entraîner une défaillance du code en raison d'un débordement de la pile alors que la mémoire virtuelle maximale est égale à la mémoire d'échange.

Vérifiez votre machine :

Mémoire virtuelle totale :ulimit -v (la valeur par défaut est illimitée, vous devez donc augmenter la mémoire d'échange pour l'augmenter)

Taille totale de la pile :ulimit -s (la valeur par défaut est de 8 Mo)

Commande pour augmenter ces valeurs :

ulimit -s newvalue

ulimit -v newvalue

*Remplacez la nouvelle valeur par la valeur que vous souhaitez définir comme limite.

Références :

http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/


En termes pratiques, la limite est généralement déterminée par l'espace de la pile. Si chaque thread obtient une pile de 1 Mo (je ne me souviens pas si c'est la valeur par défaut sous Linux), alors un système 32 bits manquera d'espace d'adressage après 3000 threads (en supposant que le dernier Go est réservé au noyau) .

Cependant, vous rencontrerez très probablement des performances médiocres si vous utilisez plus de quelques dizaines de threads. Tôt ou tard, vous obtenez trop de surcharge de changement de contexte, trop de surcharge dans le planificateur, etc. (Créer un grand nombre de threads ne fait guère plus que consommer beaucoup de mémoire. Mais beaucoup de threads avec du travail réel faire va vous ralentir car ils se battent pour le temps CPU disponible)

Que faites-vous là où cette limite est même pertinente ?


Linux
  1. Utilisation de la mémoire Linux

  2. Utilisation maximale de la mémoire d'un processus Linux/Unix

  3. Récupérer l'utilisation du processeur et l'utilisation de la mémoire d'un seul processus sous Linux ?

  4. Les threads du noyau Linux sont-ils vraiment des processus du noyau ?

  5. Limiter l'utilisation de la mémoire pour un seul processus Linux

Comment trouver un nom de processus à l'aide d'un numéro PID sous Linux

enregistrement de la marque d'eau haute de la mémoire RAM d'un processus Linux

Comment connaître le nombre de cœurs d'un système sous Linux ?

Comment l'utilisation de la mémoire est-elle signalée sous Linux ?

Représentation graphique de l'utilisation de la mémoire des processus sous Linux

Vider la mémoire d'un processus Linux dans un fichier