โดยทั่วไปแล้ว HTTP 502 หมายความว่าเซิร์ฟเวอร์หนึ่ง (เซิร์ฟเวอร์ต้นทางที่ส่งการตอบสนอง HTTP 502) พยายามพูดคุยกับเซิร์ฟเวอร์อื่นและล้มเหลว
คุณพูดถึงว่าการรีบูตเซิร์ฟเวอร์ "ตัวแรก" (เซิร์ฟเวอร์ตัวแรกแจก 502) ช่วยแก้ปัญหาได้ ซึ่งอาจหมายความว่ามีปัญหาที่ไม่ถาวรบางอย่างบนเซิร์ฟเวอร์นั้น
สาเหตุที่เป็นไปได้:
- หน่วยความจำหมด: หากเซิร์ฟเวอร์ส่วนหน้าของคุณต้องวางกระบวนการหรือเธรดใหม่เพื่อพูดคุยกับส่วนหลัง เซิร์ฟเวอร์อาจไม่สามารถทำได้
ตรวจสอบการใช้ RAM (free -m, top) และขีดจำกัดของ RAM ทั้งส่วนกลาง (/etc/security/limits.conf) และต่อกระบวนการ (cat /proc/PID/limits โดยที่ PID คือ PID ของกระบวนการของคุณ)
- จำนวนการเชื่อมต่อที่เปิดอยู่: บางทีฟรอนต์เอนด์ของคุณอาจมีการเชื่อมต่อเปิดจำนวนมากไปยังเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งหมายความว่าในบางจุดจะไม่สามารถเปิดการเชื่อมต่อใหม่ได้ และการรีสตาร์ทจะเป็นการปิดการเชื่อมต่อเหล่านั้น
วิ่ง ss -tlpnao | grep <เซิร์ฟเวอร์ส่วนหลัง IP>
(หรือพอร์ตอื่น ๆ ) และเปรียบเทียบจำนวนการเชื่อมต่อกับค่าของ sysctl net.ipv4.ip_local_port_range
และ sysctl net.ipv4.tcp_fin_timeout
.
ฉันจะเรียกใช้ก tcpdump -nni โฮสต์ใดๆ <backend ip> -v
เพื่อตรวจสอบสิ่งที่เกิดขึ้นจากมุมมองของแพ็คเก็ต คุณได้รับคำตอบหรือไม่? ถ้ามี จะตอบกลับแบบไหน? หรือว่าส่วนหน้าไม่เคยได้รับคำตอบจากส่วนหลังเลย? วิธีนี้อาจช่วยให้คุณค้นหาสาเหตุที่แท้จริงได้