Numero massimo di socket su Linux


12

Sembra che il server sia limitato a ~ 32720 socket ... Ho provato ogni cambiamento di variabile noto per aumentare questo limite. Ma il server rimane limitato a 32720 socket aperto, anche se c'è ancora 4Go di memoria libera e 80% di CPU inattiva ...

Ecco la configurazione

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

Qualche idea ? (Questa domanda è stata posta sullo stack-overflow senza fortuna finora)




Ho controllato quelle discussioni prima di pubblicare, senza fortuna
TheSquad

Risposte:



2

Stai cercando nel posto sbagliato per questo; non stai incontrando un limite utente, stai incontrando un limite di sistema che è generalmente la 15a potenza di 2 su un sistema a 32 bit, che è quello che immagino sia il tuo sistema. Dai un'occhiata:

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

Ma puoi cambiare anche quello; su una macchina a 32 bit che sarebbe 2 ** 22 come limite superiore assoluto, quindi:

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

Sarei interessato a sapere come vai.


pid_max è già alle 999999
TheSquad

1

Se stai effettivamente cercando il numero massimo di socket con cui puoi aprire le connessioni, potresti provare a guardare cat / proc / sys / net / ipv4 / ip_local_port_range; questa è la gamma di porte che il kernel utilizzerà per i socket in uscita e presenta impostazioni predefinite diverse in base alla propria distribuzione. Impostarlo su qualcosa come "1024 65535" è abbastanza aperto come puoi ottenerlo; vedere se questo aiuta le cose.


ip_local_port_range è già alle 1024 65535.
TheSquad

0

Mi dispiace se qualcosa di simile viene detto nei thread, ma non ho tempo di leggerli ora: <

Con un primo sguardo, vedo che il numero di socket che menzioni è circa la metà dei processi utente massimi. Come posso immaginare, hai un processo separato per ogni socket (probabilmente gestisci un server o qualcosa del genere)

Quello che potresti fare è controllare il numero di processi la prossima volta che raggiungi il limite del socket.

Solo un'idea, non so se aiuta.


no, non quello: # ps -ef | grep -c 'root' = 147
TheSquad

è in un ambiente controllato? potresti fare dei controlli? ad esempio, quanti processi vengono creati con ogni richiesta? Inoltre, qual è la priorità del server? Se si renice cambia qualcosa? In caso contrario, sono quasi sicuro di raggiungere il limite di processo o il limite di thread all'interno di un processo:>
Nikolaidis Fotis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.