Bu soru için en iyi forum değilse beni affet, ama çekirdekle programlamanın kendisinden daha alakalı görünüyor.
Grafikleri ve istatistikleri izleyebilmemiz için açık portlar için sistemi sorgulayan bir komut dosyası yazıyorum. Bunun için iproute paketinden "ss" komutunu kullanıyorum. Eğer yürütürseniz ss -s|grep estab
, buna benzer bir çıktı alırsınız:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Sorum, hesaplanan soketleri TIME_WAIT durumunda gösteren timewait değişkeni ile ilgili. Eğik çizgiden sonra hangi sayıya atıfta bulunulduğunu anlamaya çalıştığımda, sonuçta aşağıdaki snippet'i bulmamı sağlayan kaynak kodunu arama kasırga macerasına dönüştü:
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
);
İtiraf etmeliyim ki, "slabstat" ın ne anlama geldiğini araştırmam nihayetinde slab önbellekleri ve / proc / slabinfo'daki raporlama arayüzü hakkında öğrenmemle sonuçlandı.
Soru: Slabtable'ın TIME_WAIT soket hesaplamaları ile ne ilgisi var? Komutu denediğim her sunucuda her çalıştırdığımda, sayı her zaman sıfır olduğu için bu sayının neden bildirildiğini anlayamıyorum.