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

Maximale Anzahl von Threads pro Prozess in Linux?

Linux hat kein separates Limit für Threads pro Prozess, sondern nur ein Limit für die Gesamtzahl der Prozesse auf dem System (Threads sind im Wesentlichen nur Prozesse mit einem gemeinsam genutzten Adressraum unter Linux), die Sie folgendermaßen anzeigen können:

cat /proc/sys/kernel/threads-max

Voreingestellt ist die Anzahl der Speicherseiten/4. Sie können dies wie folgt erhöhen:

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

Es gibt auch eine Begrenzung für die Anzahl der Prozesse (und damit Threads), die ein einzelner Benutzer erstellen kann, siehe ulimit/getrlimit Einzelheiten zu diesen Beschränkungen.


Es ist FALSCH zu sagen, dass LINUX kein Limit für separate Threads pro Prozess hat.

Linux implementiert die maximale Anzahl von Threads pro Prozess indirekt!!

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

Somit kann die Anzahl der Threads pro Prozess erhöht werden, indem der gesamte virtuelle Speicher erhöht oder die Stapelgröße verringert wird. Eine zu starke Verringerung der Stapelgröße kann jedoch zu Codefehlern aufgrund eines Stapelüberlaufs führen, während der maximale virtuelle Speicher gleich dem Auslagerungsspeicher ist.

Prüfen Sie Ihr Gerät:

Gesamter virtueller Speicher:ulimit -v (Standard ist unbegrenzt, daher müssen Sie den Auslagerungsspeicher erhöhen, um dies zu erhöhen)

Gesamtstapelgröße:ulimit -s (Standard ist 8 MB)

Befehl zum Erhöhen dieser Werte:

ulimit -s newvalue

ulimit -v newvalue

*Ersetzen Sie den neuen Wert durch den Wert, den Sie als Limit setzen möchten.

Referenzen:

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


In der Praxis wird die Grenze normalerweise durch den Stapelraum bestimmt. Wenn jeder Thread einen 1-MB-Stack erhält (ich kann mich nicht erinnern, ob dies die Standardeinstellung unter Linux ist), wird einem 32-Bit-System nach 3000 Threads der Adressraum ausgehen (vorausgesetzt, das letzte GB ist für den Kernel reserviert). .

Sie werden jedoch höchstwahrscheinlich eine schreckliche Leistung erleben, wenn Sie mehr als ein paar Dutzend Threads verwenden. Früher oder später erhalten Sie zu viel Overhead für Kontextwechsel, zu viel Overhead im Scheduler und so weiter. (Das Erstellen einer großen Anzahl von Threads verbraucht kaum mehr als viel Speicher. Aber viele Threads mit tatsächlicher Arbeit zu tun, wird Sie verlangsamen, da sie um die verfügbare CPU-Zeit kämpfen)

Was machen Sie, wo diese Grenze überhaupt relevant ist?


Linux
  1. Begrenzung der Prozessspeicher-/CPU-Nutzung unter Linux

  2. So erhöhen Sie die maximale Anzahl von JVM-Threads (Linux 64bit)

  3. Protokollieren der RAM-Speicherobergrenze eines Linux-Prozesses

  4. Sind Linux-Kernel-Threads wirklich Kernel-Prozesse?

  5. Wie kann man die Anzahl der Kerne eines Systems in Linux ermitteln?

So finden Sie einen Prozessnamen mithilfe der PID-Nummer in Linux

Maximale Anzahl an Festplatten in 64-Bit-Linux?

Begrenzen Sie die Speichernutzung für einen einzelnen Linux-Prozess

Inaktiver Linux-Speicher

Welche Prozesskiller hat Linux?

Wie wird die Speichernutzung in Linux gemeldet?