web-dev-qa-db-fra.com

Comment vérifier RX Bague, max_backlog et max_syn_backlog Taille

Très souvent au cours du dépannage et du réglage des choses, je me trouve en pensant aux paramètres suivants du noyau Linux:

net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn

Autre que fs.file-max, net.ipv4.ip_local_port_range, net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, et net.ipv4.tcp_wmem, ils semblent être les boutons importants à déconner lorsque vous réglez une boîte pour des niveaux élevés de concurrence.

Ma question: Comment puis-je vérifier combien d'articles sont dans chacune de ces files d'attente? Habituellement, les gens qui les ont juste mis à la hauteur, mais j'aimerais enregistrer ces tailles de la file d'attente pour prédire l'échec futur et les problèmes de capture avant de se manifester de manière notable de l'utilisateur.

41
Colin Hostert

Moi aussi je me demandais ceci et était motivé par votre question!

J'ai rassemblé à quelle distance je pourrais venir à chacune des files d'attente que vous avez énumérées avec certaines informations relatives à chacune. Je souhaite la bienvenue aux commentaires/commentaires, toute amélioration de la surveillance facilite la gestion des choses!

net.core.somaxconn

net.ipv4.tcp_max_syn_backlog

net.core.netdev_max_backlog

$ netstat -an | grep -c SYN_RECV 

Affichera le nombre global actuel de connexions dans la file d'attente, vous pouvez rompre ce portant et mettre ceci dans les instructions EXEC dans SNMPD.CONF si vous souhaitez l'interroger à partir d'une application de surveillance.

De:

netstat -s

Celles-ci vous montreront à quelle fréquence vous voyez des demandes de la file d'attente:

146533724 packets directly received from backlog
TCPBacklogDrop: 1029
3805 packets collapsed in receive queue due to low socket buffer

fs.file-max

De:

http://linux.die.net/man/5/proc

$ cat /proc/sys/fs/file-nr
2720    0       197774

Ce fichier (en lecture seule) donne le nombre de fichiers actuellement ouverts. Il contient trois chiffres: le nombre de poignées de fichier allouées, le nombre de poignées de fichier libres et le nombre maximal de poignées de fichier.

net.ipv4.ip_local_port_range

Si vous pouvez créer une liste d'exclusion des services (NetStat -an | Grep Ecouter), vous pouvez déduire combien de connexions sont utilisées pour l'activité éphémère:

netstat -an | egrep -v "MYIP.(PORTS|IN|LISTEN)"  | wc -l

Devrait également surveiller (de SNMP):

TCP-MIB::tcpCurrEstab.0

Il peut également être intéressant de collecter des statistiques sur tous les états observés dans cet arbre (établi/time_wait/fin_wait/etc.):

TCP-MIB::tcpConnState.*

net.core.rmem_max

net.core.wmem_max

Vous auriez drables/strace votre système pour les demandes de setsockopt. Je ne pense pas que les statistiques de ces demandes soient suivies autrement. Ce n'est pas vraiment une valeur qui change de ma compréhension. L'application que vous avez déployée sera probablement demander un montant standard. Je pense que vous pouvez "profiler" votre application avec la strace et configurer cette valeur en conséquence. (discuter?)

net.ipv4.tcp_rmem

net.ipv4.tcp_wmem

Pour suivre à quel point vous êtes proche de la limite, vous devrez examiner la moyenne et max des champs TX_QUEUE et RX_QUESUE de (régulièrement):

# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 00000000:0FB1 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262030037 1 ffff810759630d80 3000 0 0 2 -1                
   1: 00000000:A133 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262029925 1 ffff81076d1958c0 3000 0 0 2 -1                

Pour suivre les erreurs liées à ceci:

# netstat -s
    40 packets pruned from receive queue because of socket buffer overrun

Devrait également surveiller la piscine mondiale 'tampon' (via SNMP):

Host-RESOURCES-MIB::hrStorageDescr.1 = STRING: Memory Buffers
Host-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 74172456
Host-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 51629704
29
polynomial

Je pense que vous pourrez peut-être obtenir ces données avec SystemTAP. Voici le Manuel de référence RedHat(PDF). Il y a aussi un Guide des débutants(PDF).

L'outil a l'air suffisamment polyvalent pour vous permettre de recevoir ces données, en particulier probe::netdev.rx ressemble à quelque chose qui vous donnera des informations sur les entrées entrantes, vous devez désormais "seulement" besoin de trouver la taille nette de la file d'attente dans le tampon, ou quelque chose qui compte les choses qui quittent la file d'attente ...

2
Paweł Brodacki