Edit / proc / sys / Kernel / Threads-max kann nicht bearbeitet werden

1993
Anarkopsykotik

Ich baue gerade ein Stresstest-Tool auf, und als solches brauche ich ziemlich viele Threads. Ich habe bereits alle Einstellungen durchlaufen, um das Limit zu erhöhen, aber es gibt eine letzte Einstellung, die obere systemweite Grenze /proc/sys/kernel/threads-max, die ich scheinbar nicht ändern kann.

Ich habe es versucht

sysctl -w kernel.threads-max=200000 

Manuell bearbeiten mit nanooderecho

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

Bearbeiten /etc/sysctl.confund Ausführen

sysctl -f 

Wenn ich diese als ausführe sudo, habe ich keinen Fehler angezeigt (der neue Wert wird sogar angezeigt), aber beim erneuten Prüfen hat sich auch der Wert nicht geändert. Beim Versuch, den Wert mit zu bearbeiten gedit, spuckte er ein

ungültiges Argument"

welchen Wert ich auch versuche, auch den ursprünglichen. Ich hatte kein Problem, den pid_maxWert zu ändern .

Ich habe wirklich keine Ahnung, warum meine Bearbeitungen abgelehnt werden, und ich habe niemanden mit einem ähnlichen Problem gefunden. Daher wäre ich sehr dankbar, wenn jemand erklären könnte, was passiert.

0
https://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux quadruplebucky vor 6 Jahren 0
Das ganze Problem ist genau, dass die einfache und offensichtliche Methode nicht funktioniert ... Anarkopsykotik vor 6 Jahren 0
Die Dateien in / proc / sind virtuell und können daher nicht bearbeitet werden. (Bitte versuchen Sie `$ du / proc /`, um zu wissen, dass nichts vorhanden ist!) .... Die Einstellung "kernel.threads-max = 200000" ist an anderer Stelle ... Knud Larsen vor 6 Jahren 0
Sie können bearbeitet werden, ich habe dies für andere Einstellungen vorgenommen und auch auf anderen Computern geändert (Testserver, auf denen Fedora ausgeführt wird). Anarkopsykotik vor 6 Jahren 0

1 Antwort auf die Frage

2
pim

Die Antwort liegt darin man proc(5), hier ist der interessante Teil:

 /proc/sys/kernel/threads-max (since Linux 2.3.11) This file specifies the system-wide limit on the number of threads (tasks) that can be created on the system.  Since Linux 4.1, the value that can be written to threads-max is bounded. The minimum value that can be written is 20. The maximum value that can be written is given by the constant FUTEX_TID_MASK (0x3fffffff). If a value outside of this range is written to threads- max, the error EINVAL occurs.  The value written is checked against the available RAM pages. If the thread structures would occupy too much (more than 1/8th) of the available RAM pages, threads- max is reduced accordingly. 

Ich gehe davon aus, dass Ihre Kernel-Version> 4.1 ist. Da also 200000 (die Nummer, die Sie ausprobieren) kleiner als 0x3fffffff ist, sieht das Problem so aus, als wäre der verfügbare Arbeitsspeicher nicht ausreichend.

Ist 0x3fffffff nicht mehr als 2.000.000.000? Selbst die ursprünglichen oder niedrigere Nummern funktionierten nicht, obwohl dies in der Tat auf die Begrenzung des verfügbaren RAMs zurückzuführen sein könnte. Anarkopsykotik vor 6 Jahren 0
200.000 sind weit weniger als 0x3fffffff, so wie es geschrieben wird pim vor 6 Jahren 0
Nun, Google belügt mich oder sein Hexa nicht; p Aber trotzdem bin ich ziemlich sicher, dass es mit dem verfügbaren RAM zusammenhängt, da das Tweaking der Nummer jetzt zu funktionieren scheint (hat letztes Mal nicht funktioniert, muss also vom tatsächlich verwendeten RAM abhängen), aber Sobald ich zu hoch bin, wird der Wert auf 96062 zurückgesetzt (muss von meinem physischen RAM berechnet werden). Anarkopsykotik vor 6 Jahren 0
Nicht getestet, aber Wolfram Alpha sagt 0x3fffffff = 1073741823, daher sollte Folgendes lauten: `` `echo kernel.threads-max = 1073741823 >> / etc / sysctl.conf``` `` echo 1073741823> / proc / sys / kernel / thread-max``` (http://www.wolframalpha.com/input/?i=0x3fffffff) James McGuigan vor 6 Jahren 0