repro อย่างง่าย - ในกระบวนการเฝ้าดูหน้าต่างเดียวที่ด้านบนในการเรียกใช้อื่น ๆ : nc -lkp 10000 > /dev/null & ( head -50000000 /dev/urandom | nc -N 127.0.0.1 10000 ) & ( head -50000000 /dev/urandom | nc -N 127.0.0.1 10000 )
สังเกตที่เดียว ศีรษะ
และ เอ็นซี
กระบวนการกำลังใช้ CPU อย่างแข็งขัน
แนบรอยกับ ศีรษะ
ที่ไม่ได้ใช้งาน - ดูว่าหยุดเขียนเช่น:
strace: แนบกระบวนการ 589084
เขียน(1, "\264\347\270\26\27\24'BRb^\353\302\36@\216\17V\210*n\252`\353\330\351\276\2\250 \330\350\217"..., 4096^Cstrace: แยกกระบวนการ 589084 ออก
<เดี่ยว ...>
ตั้งค่า Listener สองตัวบนพอร์ตต่างๆ เช่น 10,000 และ 10,001 และทั้งคู่วิ่งด้วยความเร็วสูงสุด
นี่เป็นตัวอย่างง่ายๆ แต่ฉันสามารถทำซ้ำได้ด้วยอินพุตและเอาต์พุตอื่นๆ เช่น zcatting ไฟล์ขนาดใหญ่และส่งไปยังบริการที่ใช้งานจริงผ่านเครือข่าย ไม่เกี่ยวกับอินพุต และไม่เกี่ยวกับซ็อกเก็ตการฟัง
ดังนั้น - เหตุใดฉันจึงมีการเชื่อมต่อ tcp ได้เพียงหนึ่งรายการกับโฮสต์/พอร์ตที่กำหนดที่กำลังส่งข้อมูลอยู่
มีแหล่งข้อมูลอิสระ (อย่าลังเลที่จะทดลองหากคุณไม่เชื่อฉัน) และกระบวนการอิสระที่เปิดการเชื่อมต่อ tcp ของตัวเอง (เน็ตสแตท
จะแสดงทั้งคู่เปิดอยู่) - สิ่งเดียวที่เหมือนกันคือปลายทาง (ซึ่งไม่จำเป็นต้องเป็นไฟล์ เอ็นซี
กำลังฟังอยู่ แท้จริง
- เกิดขึ้นกับสิ่งใด).
เนื่องจากปลายทางสามารถมีซ็อกเก็ตขาเข้าหลายตัวที่รับข้อมูลพร้อมกันได้อย่างแน่นอน และต้นทางสามารถส่งข้อมูลลงไปที่ซ็อกเก็ตเครือข่ายหลายตัวพร้อมกันได้อย่างแน่นอน ฉันพยายามหาว่าความขัดแย้งมาจากไหน ทำให้มีเพียงไพพ์เดียวที่เปิดใช้งานที่ ครั้งหนึ่ง.