Nombre maximum de socket sous Linux

12

Il semble que le serveur soit limité à environ 32720 sockets ... J'ai essayé chaque changement de variable connu pour augmenter cette limite. Mais le serveur reste limité à 32720 socket ouvert, même s'il reste 4Go de mémoire libre et 80% de CPU inactif ...

Voici la configuration

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

Des pensées ? (Cette question a été posée sur stack-overflow sans succès jusqu'à présent)

L'escouade
la source
serverfault.com/questions/10852/… a de bonnes données
sysadmin1138
Tout comme stackoverflow.com/questions/410616/…
sysadmin1138
J'ai vérifié ces fils de discussion avant de poster, sans
succès

Réponses:

8

J'ai trouvé ce qui limitait tout:

max_map_count

Merci à tous ceux qui ont répondu!

L'escouade
la source
Les prises étaient donc un hareng rouge. Bon à savoir.
pjz
Comment le changez-vous? Avez-vous un document qui décrit ce qu'il fait?
Ryan Shillington
2

Vous cherchez au mauvais endroit pour celui-ci; vous ne rencontrez pas de limite d'utilisateur, vous rencontrez une limite de système qui est généralement la 15e puissance de 2 sur un système 32 bits, ce que je suppose que votre système est. Vérifier:

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

Mais vous pouvez aussi changer cela; sur une machine 32 bits qui serait 2 ** 22 comme limite supérieure absolue, donc:

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

J'aimerais savoir comment vous allez.

Xerxès
la source
pid_max est déjà à 999999
TheSquad
1

Si vous essayez en fait de regarder le nombre maximum de sockets avec lesquels vous pouvez ouvrir des connexions, vous pouvez essayer de regarder cat / proc / sys / net / ipv4 / ip_local_port_range; il s'agit de la plage de ports que le noyau utilisera pour les sockets sortants, et il a des valeurs par défaut différentes en fonction de votre distribution. Le définir sur quelque chose comme «1024 65535» est à peu près aussi ouvert que possible; voir si cela aide les choses.

pjz
la source
ip_local_port_range est déjà à 1024 65535.
TheSquad
0

Je suis désolé si quelque chose de similaire est dit dans les discussions, mais je n'ai pas le temps de les lire maintenant: <

Avec un premier regard, je vois que le nombre de sockets que vous mentionnez est environ la moitié du nombre maximum de processus utilisateur. Comme je peux deviner que vous avez un processus séparé pour chaque socket (vous exécutez probablement un serveur ou quelque chose comme ça)

Ce que vous pourriez faire est de vérifier le nombre de processus la prochaine fois que vous atteindrez la limite du socket.

Juste une idée, je ne sais pas si ça aide.

Nikolaidis Fotis
la source
non, pas que: # ps -ef | grep -c 'root' = 147
TheSquad
est-ce sous environnement contrôlé? pourriez-vous faire quelques vérifications? par exemple, combien de processus sont créés à chaque demande? Aussi, quelle est la priorité du serveur? Si vous le reniez, cela change-t-il quelque chose? Sinon, je suis presque sûr que vous atteignez la limite de processus ou la limite de threads dans un processus:>
Nikolaidis Fotis