ฉันมีเครื่อง SLES ที่สะสมการเชื่อมต่อ TCP ในสถานะ CLOSE_WAIT สำหรับสิ่งที่ดูเหมือนจะเป็นตลอดไป ตัวอธิบายเหล่านี้ดูดหน่วยความจำที่มีอยู่ทั้งหมดในที่สุด ในขณะนี้ฉันมี 3037 ของพวกเขา แต่มันสูงกว่ามากก่อนที่จะรีบูตเครื่องเร็ว ๆ นี้
สิ่งที่น่าสนใจคือพวกเขาไม่ได้มาจากการเชื่อมต่อไปยังพอร์ตท้องถิ่นที่ฉันคาดว่าจะมีกระบวนการฟัง พวกเขาไม่มี PID ที่เกี่ยวข้องและตัวจับเวลาดูเหมือนว่าจะหมดอายุแล้ว
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT -
ฉันไม่ใช่เข็มขัดหนังสีดำเมื่อพูดถึงสแต็ก TCP หรือเครือข่ายเคอร์เนล แต่การตั้งค่า TCP ดูเหมือนว่ามีเหตุผลเนื่องจากค่าเหล่านี้เป็นค่าเริ่มต้นตามหน้า man:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
แล้วอะไรล่ะ หากตัวจับเวลาหมดอายุแล้วสแต็คไม่ควรล้างข้อมูลนี้ออกโดยอัตโนมัติหรือไม่ ฉันให้ DoS ระยะยาวกับตัวเองอย่างมีประสิทธิภาพเพราะสิ่งเหล่านี้สร้างขึ้น
sudo netstat -tonp
ดูว่าโปรแกรมนี้เกิดขึ้นกับอะไร