Befehl "ss" im iproute-Paket; Warum sollte man eine Plattentabelle nach Timewait Sockets abfragen?


15

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 estabSie 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.


Um ehrlich zu sein, würden Sie wahrscheinlich die besten Antworten erhalten, wenn Sie dies auf eine der relevanten Kernel-Mailinglisten setzen, siehe tux.org/lkml/#related-lists
jeremiahd

Der Code zeigt nur, wie viele Wartesteckdosen in der Platte zugeordnet sind. IMO es hilft nur, um die Speichernutzung zu bestimmen
Ulrich Dangel

Antworten:


0

Es sieht so aus, als wäre tcp_tw_bucketses das, was letztendlich abgefragt wird. Dies ist eine Struktur, die ab Linux 2.6.12 entfernt wurde

Die 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.


Wenn es sich vor 2.6.12 auf einem Kernel befindet, ist der Wert slabstat.tcp_tws gleich s.tcp_tws ? Gibt es einen Unterschied zwischen diesen beiden Werten? (einer ist aus / proc / net / sockstat und einer ist aus / proc / slabinfo)
Ruanhao
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.