Pardonnez-moi si ce n'est pas le meilleur forum pour cette question, mais cela semble plus pertinent pour le noyau que pour la programmation elle-même.
J'écris un script qui interroge le système pour les ports ouverts afin que nous puissions représenter graphiquement et surveiller les statistiques. Pour cela, j'utilise la commande "ss" du package iproute. Si vous exécutez, ss -s|grep estab
vous recevrez une sortie similaire à ceci:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Ma question concerne la variable timewait, qui montre les sockets calculées dans l'état TIME_WAIT. Lorsque j'ai essayé de comprendre quel numéro était référencé après la barre oblique, c'est devenu une aventure tourbillonnante de recherche de code source qui m'a finalement conduit à trouver l'extrait de code suivant:
printf("TCP: %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
sn.tcp_estab,
s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
s.tcp_orphans,
slabstat.tcp_syns,
s.tcp_tws, slabstat.tcp_tws,
slabstat.tcp_ports
);
Je dois admettre que ma recherche de ce que "slabstat" était censé signifier a finalement conduit à mon apprentissage des caches de dalle et de leur interface de rapport sur / proc / slabinfo.
La question: qu'est-ce que la table de tableaux a à voir avec les calculs de socket TIME_WAIT? Je n'arrive pas à comprendre pourquoi ce nombre est signalé, car chaque fois que j'exécute la commande sur tous les serveurs sur lesquels j'ai essayé, le nombre a toujours été zéro.
la source
Réponses:
Il ressemble à
tcp_tw_buckets
ce qui est finalement interrogé, qui est une structure supprimée à partir de Linux 2.6.12Ainsi, le dernier nombre serait probablement toujours 0, sauf s'il s'agit de noyaux de 7 ans.
En ce qui concerne l'interrogation de la dalle, pour autant que je sache, c'est ridiculement plus rapide que les autres méthodes disponibles.
la source