Verzeih mir, wenn dies nicht das beste Forum für diese Frage ist, aber es scheint für den Kernel relevanter zu sein als für die Programmierung selbst.
Ich schreibe ein Skript, das das System nach offenen Ports abfragt, damit wir die Statistiken grafisch darstellen und überwachen können. Dafür verwende ich den Befehl "ss" aus dem iproute-Paket. Wenn Sie ausführen, erhalten ss -s|grep estab
Sie eine Ausgabe ähnlich der folgenden:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Meine Frage hat mit der Variable timewait zu tun, die die berechneten Sockets im TIME_WAIT-Status anzeigt. Als ich versuchte herauszufinden, auf welche Nummer nach dem Schrägstrich verwiesen wurde, wurde die Suche nach Quellcode zu einem Abenteuer, das mich letztendlich dazu brachte, den folgenden Ausschnitt zu finden:
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
);
Ich muss zugeben, meine Suche nach dem, was "slabstat" bedeuten sollte, führte letztendlich dazu, dass ich etwas über die Slab-Caches und deren Berichtsschnittstelle unter / proc / slabinfo erfuhr.
Die Frage: Was hat der Slabtable mit TIME_WAIT-Socket-Berechnungen zu tun? Ich kann nicht herausfinden, warum diese Nummer gemeldet wird, da jedes Mal, wenn ich den Befehl auf jedem Server ausgeführt habe, auf dem ich ihn ausprobiert habe, die Nummer immer Null war.
quelle
Antworten:
Es sieht so aus, als wäre
tcp_tw_buckets
es das, was letztendlich abgefragt wird. Dies ist eine Struktur, die ab Linux 2.6.12 entfernt wurdeDie letzte Zahl wäre also wahrscheinlich immer 0, es sei denn, es handelt sich um einen 7 Jahre alten Kernel.
Was das Abfragen von Platten betrifft, so ist es, soweit ich das beurteilen kann, lächerlich schneller als die anderen verfügbaren Methoden.
quelle