เราประสบปัญหาการขัดข้องเล็กน้อยกับหนึ่งใน HAProxy VMs ของเราวันนี้ เมื่อเราขุดลงไปเราจะพบสิ่งนี้:
26 มกราคม 07:41:45 เคอร์เนล haproxy2: [226818.070059] ratratit: 10 ระงับการโทรกลับ 26 มกราคม 07:41:45 เคอร์เนล haproxy2: [226818.070064] ออกจากหน่วยความจำซ็อกเก็ต 26 มกราคม 07:41:47 เคอร์เนล haproxy2: [226819.560048] ออกจากหน่วยความจำซ็อกเก็ต 26 มกราคม 07:41:49 เคอร์เนล haproxy2: [226822.030044] ออกจากหน่วยความจำซ็อกเก็ต
ซึ่งต่อลิงก์นี้net.ipv4.tcp_mem
เห็นได้ชัดว่าจะทำอย่างไรกับการตั้งค่าเริ่มต้นต่ำ ดังนั้นเราจึงเพิ่มพวกมันขึ้น 4 เท่าจากค่าเริ่มต้น (นี่คือเซิร์ฟเวอร์ Ubuntu ไม่แน่ใจว่ารสชาติของ Linux มีความสำคัญ):
ค่าปัจจุบันคือ: 45984 61312 91968 ค่าใหม่คือ: 183936 245248 367872
หลังจากนั้นเราเริ่มเห็นข้อความแสดงข้อผิดพลาดที่แปลกประหลาด:
26 มกราคม 08:18:49 เคอร์เนล haproxy1: [2291.579726] เส้นทางแฮชเชนยาวเกินไป! 26 มกราคม 08:18:49 เคอร์เนล haproxy1: [2291.579732] ปรับ secret_interval ของคุณ!
Shh .. มันเป็นความลับ !!
เห็นได้ชัดว่าสิ่งนี้เกี่ยวข้องกับ/proc/sys/net/ipv4/route/secret_interval
ค่าเริ่มต้นที่ 600 และควบคุมการล้างแคชเส้นทางเป็นระยะ
secret_interval
สั่งเคอร์เนลวิธีการที่มักจะพัดไปทุกรายการเส้นทางกัญชาโดยไม่คำนึงถึงวิธีการใหม่ / เก่าที่พวกเขามี ในสภาพแวดล้อมของเรานี้โดยทั่วไปจะไม่ดี CPU จะกำลังสร้างรายการหลายพันรายการต่อวินาทีทุกครั้งที่มีการล้างแคช อย่างไรก็ตามเราตั้งค่านี้ให้ทำงานวันละครั้งเพื่อป้องกันการรั่วไหลของหน่วยความจำ (แม้ว่าเราไม่เคยมี)
ในขณะที่เรามีความสุขที่จะลดสิ่งนี้ดูเหมือนว่าแปลกที่จะแนะนำให้วางแคชเส้นทางทั้งหมดในช่วงเวลาปกติแทนที่จะเพียงผลักค่าเก่าออกจากแคชเส้นทางเร็วขึ้น
หลังจากการตรวจสอบเราพบ/proc/sys/net/ipv4/route/gc_elasticity
ว่ามีตัวเลือกที่ดีกว่าในการตรวจสอบขนาดตารางเส้นทางในการตรวจสอบ:
gc_elasticity
สามารถอธิบายได้ดีที่สุดเนื่องจากความลึกของที่เก็บข้อมูลโดยเฉลี่ยเคอร์เนลจะยอมรับก่อนที่จะเริ่มหมดอายุรายการแฮชของเส้นทาง สิ่งนี้จะช่วยรักษาขีด จำกัด บนของเส้นทางที่ใช้งานอยู่
เราปรับความยืดหยุ่นจาก 8 เป็น 4 ด้วยความหวังว่าแคชเส้นทางจะตัดแต่งตัวเองอย่างจริงจังมากขึ้น ความsecret_interval
รู้สึกไม่ถูกต้องกับเรา แต่มีการตั้งค่ามากมายและไม่มีความชัดเจนซึ่งเป็นวิธีที่เหมาะสมในการไปที่นี่
- / proc / sys / net / ipv4 / เส้นทาง / gc_elasticity (8)
- / proc / sys / net / ipv4 / เส้นทาง / gc_interval (60)
- / proc / sys / net / ipv4 / เส้นทาง / gc_min_interval (0)
- / proc / sys / net / ipv4 / เส้นทาง / gc_timeout (300)
- / proc / sys / net / ipv4 / เส้นทาง / secret_interval (600)
- / proc / sys / net / ipv4 / เส้นทาง / gc_thresh (?)
- rhash_entries (พารามิเตอร์เคอร์เนลไม่ทราบค่าเริ่มต้น?)
เราไม่ต้องการทำให้เส้นทาง Linux แย่ลงดังนั้นเราจึงกลัวที่จะยุ่งกับการตั้งค่าเหล่านี้
มีใครบ้างที่สามารถแนะนำพารามิเตอร์การกำหนดเส้นทางที่ดีที่สุดในการปรับแต่งสำหรับอินสแตนซ์ HAProxy ที่มีปริมาณการใช้งานสูง