Maksymalna liczba gniazd w systemie Linux

12

Wygląda na to, że serwer ma ograniczoną liczbę ~ 32720 gniazd ... Próbowałem każdej znanej zmiany zmiennej, aby podnieść ten limit. Ale serwer pozostaje ograniczony przy 32720 otwartym gnieździe, nawet jeśli nadal jest 4Go wolnej pamięci i 80% bezczynności procesora ...

Oto konfiguracja

~# 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

Jakieś pomysły ? (To pytanie zadane przy przepełnieniu stosu, jak dotąd bez powodzenia)

Ekipa
źródło
serverfault.com/questions/10852/... ma dobre dane
sysadmin1138
Podobnie jak stackoverflow.com/questions/410616/…
sysadmin1138
Sprawdziłem te wątki przed opublikowaniem, bez powodzenia
TheSquad

Odpowiedzi:

8

Odkryłem, co ogranicza wszystko:

max_map_count

Dziękujemy wszystkim, którzy odpowiedzieli!

Ekipa
źródło
Gniazda były więc czerwonym śledziem. Dobrze wiedzieć.
pjz
Jak to zmienić? Czy masz dokument opisujący jego działanie?
Ryan Shillington,
2

Szukasz niewłaściwego miejsca dla tego; nie napotykasz limitu użytkowników, napotykasz na limit systemu, który jest generalnie 15. potęgą 2 w systemie 32-bitowym, i tak właśnie przypuszczam. Czek:

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

Ale ty też możesz to zmienić; na komputerze 32-bitowym, który byłby 2 ** 22 jako absolutny górny limit, więc:

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

Chciałbym wiedzieć, jak idziesz.

Kserkses
źródło
pid_max jest już na 999999
TheSquad
1

Jeśli faktycznie próbujesz sprawdzić maksymalną liczbę gniazd, z którymi możesz otwierać połączenia, możesz spróbować spojrzeć na cat / proc / sys / net / ipv4 / ip_local_port_range; jest to zakres portów, których jądro będzie używać dla gniazd wychodzących i ma różne wartości domyślne w zależności od dystrybucji. Ustawienie na coś takiego jak „1024 65535” jest tak szeroko otwarte, jak to tylko możliwe; zobacz, czy to pomaga.

pjz
źródło
ip_local_port_range jest już na 1024 65535.
TheSquad
0

Przykro mi, jeśli w wątkach zostało powiedziane coś podobnego, ale nie mam czasu, aby je teraz przeczytać: <

Po pierwszym spojrzeniu widzę, że liczba gniazd, o których wspominasz, stanowi około połowy maksymalnej liczby procesów użytkownika. Jak mogę się domyślić, masz oddzielny proces dla każdego gniazda (prawdopodobnie prowadzisz serwer lub coś takiego)

Co możesz zrobić, to sprawdzić liczbę procesów, gdy następnym razem osiągniesz limit gniazda.

Pomysł, nie wiem czy to pomaga.

Nikolaidis Fotis
źródło
nie, nie że: # ps -ef | grep -c 'root' = 147
TheSquad
czy to w kontrolowanym środowisku? czy mógłbyś zrobić kilka czeków? na przykład, ile procesów powstaje przy każdym żądaniu? Jaki jest priorytet serwera? Jeśli cofniesz się, to coś zmieni? Jeśli nie, to jestem prawie pewien, że osiągniesz limit procesu lub limit wątków w procesie:>
Nikolaidis Fotis