Maafkan saya jika ini bukan forum terbaik untuk pertanyaan ini, tetapi tampaknya lebih relevan untuk kernel daripada pemrograman itu sendiri.
Saya sedang menulis skrip yang menanyakan sistem untuk port terbuka sehingga kami dapat membuat grafik dan memantau statistik. Untuk ini, saya menggunakan perintah "ss" dari paket iproute. Jika Anda mengeksekusi ss -s|grep estab
Anda akan menerima output yang mirip dengan ini:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Pertanyaan saya berkaitan dengan variabel timewait, yang menunjukkan soket yang dihitung dalam keadaan TIME_WAIT. Ketika saya mencoba mencari tahu nomor apa yang dirujuk setelah slash, itu menjadi petualangan angin puyuh untuk mencari kode sumber yang akhirnya membuat saya menemukan potongan berikut:
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
);
Harus saya akui, pencarian saya akan arti "slabstat" pada akhirnya mengarah pada pembelajaran saya tentang cache slab dan antarmuka pelaporannya di / proc / slabinfo.
Pertanyaannya: Apa hubungan slabtable dengan perhitungan soket TIME_WAIT? Saya gagal mengetahui mengapa nomor ini dilaporkan, karena setiap kali saya menjalankan perintah di setiap server yang saya coba, jumlahnya selalu nol.