การตั้งค่าnet.core.somaxconn
ให้เป็นค่าที่สูงขึ้นเป็นสิ่งจำเป็นเฉพาะในเซิร์ฟเวอร์ highloaded ที่อัตราการเชื่อมต่อใหม่เป็น / ช่วง ๆ ดังนั้นสูงที่มี 128 (เพิ่มขึ้น 50% ใน BSD ของ 128 backlog
+ 64 half-open
) การเชื่อมต่อที่ยังไม่ได้รับการยอมรับถือว่าเป็นเรื่องปกติ หรือเมื่อคุณต้องการมอบสิทธิ์นิยาม "ปกติ" ให้กับแอปพลิเคชันเอง
ผู้ดูแลระบบบางคนใช้สูงnet.core.somaxconn
เพื่อซ่อนปัญหากับบริการของพวกเขาดังนั้นจากมุมมองของผู้ใช้กระบวนการมันจะดูเหมือนหน่วงแฝงแทนการเชื่อมต่อขัดจังหวะ / หมดเวลา (ควบคุมโดยnet.ipv4.tcp_abort_on_overflow
ใน Linux)
listen(2)
manual says - net.core.somaxconn
ทำหน้าที่เฉพาะขอบเขตบนสำหรับแอปพลิเคชันซึ่งมีอิสระที่จะเลือกบางอย่างที่เล็กกว่า แม้ว่าแอพบางตัวจะใช้listen(fd, -1)
ซึ่งหมายถึงการตั้งค่า Backlog ให้เป็นค่าสูงสุดที่ระบบอนุญาต
สาเหตุที่แท้จริงคืออัตราการประมวลผลต่ำ (เช่นเซิร์ฟเวอร์บล็อกเธรดเดียว) หรือจำนวนเธรด / กระบวนการของผู้ปฏิบัติงานไม่เพียงพอ (เช่นซอฟต์แวร์การบล็อกหลายกระบวนการ / เธรดเช่นapache
/ tomcat
)
PS บางครั้งการล้มเหลวอย่างรวดเร็วและปล่อยให้ load-balancer ทำงาน (ลองใหม่) มากกว่าทำให้ผู้ใช้รอ - เพื่อจุดประสงค์ที่เราตั้งค่าnet.core.somaxconn
ใด ๆ และ จำกัด backlog ของแอปพลิเคชันเป็นเช่น10
และตั้งค่าnet.ipv4.tcp_abort_on_overflow
เป็น 1
PPS เคอร์เนล Linux รุ่นเก่ามีข้อผิดพลาดที่น่ารังเกียจในการตัดsomaxcon
ค่าเป็น 16 บิตที่ต่ำกว่า (เช่นค่าการส่งข้อมูลuint16_t
) ดังนั้นการเพิ่มมูลค่าให้มากกว่า65535
สามารถเป็นอันตรายได้ ดูข้อมูลเพิ่มเติมได้ที่: http://patchwork.ozlabs.org/patch/255460/
หากคุณต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับงานในมือทั้งหมดใน Linux โปรดอ่าน:
การทำงานของ backlog TCP ใน Linux เป็นอย่างไร