Maximale Anzahl von Sockets unter Linux


12

Es scheint, dass der Server auf ~ 32720 Sockets begrenzt ist ... Ich habe jede bekannte Variablenänderung versucht, um dieses Limit anzuheben. Der Server bleibt jedoch auf 32720 geöffneten Socket begrenzt, selbst wenn noch 4Go freier Speicher und 80% der inaktiven CPU vorhanden sind ...

Hier ist die Konfiguration

~# 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) 63931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 798621
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 2048
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

net.netfilter.nf_conntrack_max = 999999
net.ipv4.netfilter.ip_conntrack_max = 999999
net.nf_conntrack_max = 999999

Irgendwelche Gedanken? (Diese Frage wurde beim Stapelüberlauf bisher ohne Glück gestellt)




Ich habe diese Threads vor dem Posten überprüft, ohne Glück
TheSquad

Antworten:



2

Sie suchen am falschen Ort nach diesem; Sie stoßen nicht auf ein Benutzerlimit, sondern auf ein Systemlimit, das im Allgemeinen die 15. Potenz von 2 auf einem 32-Bit-System ist. Ich vermute, dass dies Ihr System ist. Prüfen:

 % cat /proc/sys/kernel/pid_max 
 32768
 %

Aber das können Sie auch ändern. auf einem 32-Bit-Rechner wäre das 2 ** 22 als absolute Obergrenze, also:

% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
%

Es würde mich interessieren, wie es dir geht.


pid_max ist bereits um 999999
TheSquad

1

Wenn Sie tatsächlich versuchen, die maximale Anzahl von Sockets zu ermitteln, mit denen Sie Verbindungen öffnen können, können Sie sich Cat / proc / sys / net / ipv4 / ip_local_port_range ansehen. Dies ist der Bereich von Ports, den der Kernel für ausgehende Sockets verwendet. Je nach Distribution gibt es unterschiedliche Standardeinstellungen. Das Einstellen auf "1024 65535" ist ungefähr so ​​weit offen, wie Sie es bekommen können. sehen, ob das hilft.


ip_local_port_range ist bereits um 1024 65535.
TheSquad

0

Es tut mir leid, wenn in den Threads etwas Ähnliches gesagt wird, aber ich habe jetzt keine Zeit, sie zu lesen: <

Auf den ersten Blick sehe ich, dass die Anzahl der Sockets, die Sie erwähnen, ungefähr die Hälfte der maximalen Benutzerprozesse beträgt. Wie ich mir vorstellen kann, haben Sie für jeden Socket einen eigenen Prozess (wahrscheinlich betreiben Sie einen Server oder ähnliches).

Sie können die Anzahl der Prozesse überprüfen, wenn Sie das nächste Mal das Socket-Limit erreichen.

Nur eine Idee, ich weiß nicht, ob es hilft.


Nein, nicht das: # ps -ef | grep -c 'root' = 147
TheSquad

ist das unter kontrollierter Umgebung? Könntest du ein paar Schecks machen? Wie viele Prozesse werden beispielsweise mit jeder Anforderung erstellt? Welche Priorität hat der Server? Wenn Sie es ablehnen, ändert es etwas? Wenn nicht, bin ich mir fast sicher, dass Sie entweder das Prozesslimit oder das Thread-Limit innerhalb eines Prozesses erreichen:>
Nikolaidis Fotis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.