การเพิ่ม net.core.somaxconn จะสร้างความแตกต่างหรือไม่?


27

ฉันได้รับการโต้แย้งในพารามิเตอร์ net.core.somaxconn: ฉันบอกว่ามันจะไม่สร้างความแตกต่างถ้าเราเปลี่ยนค่าเริ่มต้น 128

ฉันเชื่อว่านี่อาจเป็นข้อพิสูจน์ที่เพียงพอ:

"ถ้าอาร์กิวเมนต์งานค้างมีค่ามากกว่าค่าใน / proc / sys / net / core / somaxconn แสดงว่ามีการตัดทอนอย่างเงียบ ๆ เป็นค่านั้น" http://linux.die.net/man/2/listen

แต่มันไม่ใช่

ไม่มีใครรู้วิธีที่จะเป็นพยานในเรื่องนี้ด้วยสองเครื่องซึ่งนั่งอยู่บนเครือข่าย Gbit? สิ่งที่ดีที่สุดคือ MySQL, LVS, apache2 (2.2), memcached

คำตอบ:


43

การตั้งค่า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 เป็นอย่างไร


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.