HTTP 502 thường có nghĩa là một máy chủ (máy chủ khởi tạo phản hồi HTTP 502) đã cố giao tiếp với một máy chủ khác nhưng không thành công.
Bạn đề cập rằng việc khởi động lại máy chủ "đầu tiên" (máy chủ cuối cùng đưa ra 502) sẽ khắc phục sự cố, điều này có thể có nghĩa là có một số loại sự cố không liên tục trên máy chủ đó.
Lý do có thể:
- cạn kiệt bộ nhớ: nếu máy chủ giao diện người dùng của bạn phải sinh ra một quy trình hoặc luồng mới để nói chuyện với phần phụ trợ, thì nó có thể không thực hiện được điều này.
Kiểm tra mức sử dụng RAM (free -m, top) và giới hạn RAM, cả trên toàn cầu (/etc/security/limits.conf) và trên mỗi quy trình (cat /proc/PID/limits, trong đó PID là PID của quy trình của bạn).
- số lượng kết nối đang mở: có thể giao diện người dùng của bạn có nhiều kết nối đang mở với máy chủ phụ trợ, điều đó có nghĩa là tại một số thời điểm, nó không thể mở một kết nối mới và việc khởi động lại sẽ đóng các kết nối đó.
Chạy ss -tlpnao | grep <IP máy chủ phụ trợ>
(hoặc bất kỳ cổng nào khác) và so sánh số lượng kết nối với các giá trị của sysctl net.ipv4.ip_local_port_range
và sysctl net.ipv4.tcp_fin_timeout
.
Tôi cũng sẽ chạy một tcpdump -nni bất kỳ máy chủ nào <ip phụ trợ> -v
để kiểm tra những gì đang xảy ra từ góc độ gói tin. Bạn có nhận được trả lời không? Nếu vậy, loại trả lời? Hay đơn giản là frontend không bao giờ nhận được phản hồi từ backend? Điều này có thể giúp bạn tìm ra nguyên nhân gốc rễ.