ยกโทษให้ฉันถ้านี่ไม่ใช่ฟอรัมที่ดีที่สุดสำหรับคำถามนี้ แต่ดูเหมือนว่าจะเกี่ยวข้องกับเคอร์เนลมากกว่าที่จะเขียนโปรแกรมเอง
ฉันกำลังเขียนสคริปต์ที่สืบค้นระบบสำหรับพอร์ตเปิดเพื่อให้เราสามารถสร้างกราฟและตรวจสอบสถิติได้ สำหรับสิ่งนี้ฉันใช้คำสั่ง "ss" จากแพ็คเกจ iproute หากคุณดำเนินการss -s|grep estab
คุณจะได้รับผลลัพธ์เช่นนี้:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
คำถามของฉันเกี่ยวกับตัวแปร timewait ซึ่งแสดงซ็อกเก็ตที่คำนวณในสถานะ TIME_WAIT เมื่อฉันพยายามหาตัวเลขที่อ้างอิงหลังจากสแลชมันกลายเป็นการผจญภัยในการค้นหาซอร์สโค้ดซึ่งท้ายที่สุดก็ทำให้ฉันพบตัวอย่างต่อไปนี้:
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
);
ฉันต้องยอมรับว่าการค้นหาสิ่งที่ "slabstat" ควรหมายถึงในที่สุดนำไปสู่การเรียนรู้ของฉันเกี่ยวกับแคชพื้นและส่วนต่อประสานการรายงานที่ / proc / slabinfo
คำถาม: slabtable เกี่ยวข้องกับการคำนวณซ็อกเก็ต TIME_WAIT อย่างไร ฉันไม่ทราบสาเหตุที่จะรายงานหมายเลขนี้เนื่องจากทุกครั้งที่ฉันเรียกใช้คำสั่งในทุกเซิร์ฟเวอร์ที่ฉันได้ลองใช้หมายเลขจะเป็นศูนย์เสมอ