Điểm:0

Các phương pháp hay nhất để khắc phục sự cố ứng dụng php bị kẹt do lệnh gọi cuộn tròn nội bộ đến các điểm cuối không phản hồi

lá cờ cn

Gần đây, tôi thấy mình có một trang web (Thương mại điện tử Prestashop trên máy Centos PHP-FPM /Apache / MySql) không hoạt động và không phản hồi các yêu cầu web.

Sau khi điều tra, sự cố là do lệnh gọi API được thực hiện bằng php-curl hướng tới điểm cuối tạm thời ngoại tuyến, bên trong tệp PHP của ứng dụng được gọi lại trong tất cả các trang của trang web.

Cuộc gọi cURL đã được thực hiện sai mà không có cài đặt CURLOPT_TIMEOUT_MS, vì vậy người dùng truy cập trang web của tôi đã nhanh chóng lấp đầy số lượng kết nối php tối đa, chặn các quy trình php-fpm và ngăn máy chủ của tôi nhận các kết nối đến khác.

Tôi tự hỏi liệu người ta có thể ngăn chặn/xác định nhanh chóng và hiệu quả sự cố như vậy "trong quá trình sản xuất" từ thiết bị đầu cuối nếu nó xảy ra lần nữa hay không (đặc biệt là để nhanh chóng hiểu đâu là điểm cuối bị chặn hoặc xác định tệp mà từ đó tập lệnh đã chặn máy chủ được tạo) , vì trong trường hợp của tôi, tôi phải kiểm tra sự cố ở "cấp ứng dụng" thay vì từ máy chủ vì:

  • khởi chạy "top" máy chủ hiển thị danh sách các quy trình php-fpm bị chặn mà không có bất kỳ thông tin bổ sung nào để hiểu vấn đề (đồng thời tải trung bình của máy chủ là khoảng 0,00 vì hầu như không có hoạt động nào do kết nối bị kẹt).
  • Khởi chạy "netstat -nputw" cho tôi thấy rất nhiều kết nối nội bộ ở trạng thái TIME_WAIT, nhưng một lần nữa không có thông tin nào về "thủ phạm" ngừng hoạt động (tôi có thể thấy điểm cuối được gọi bởi php-curl bằng netstat hoặc lệnh mạng tương tự không?)
  • Khởi chạy "dấu vết" của các quy trình php-fpm, tôi thấy rất nhiều tệp liên quan, nhưng điều này không hữu ích lắm vì trang web, với lưu lượng truy cập trung bình, sẽ mở hàng tá tệp.
  • Nhật ký máy chủ web chỉ thông báo cho tôi về thời gian chờ kết nối với tài nguyên web chứ không thông báo về tập lệnh chứa lệnh gọi cURL có vấn đề.

Cảm ơn bạn đã giúp đỡ.

lá cờ ua
Thêm thời gian chờ và đo thời gian nó treo.
user3256843 avatar
lá cờ cn
câu hỏi không phải là phải làm gì sau khi hiểu được gốc rễ của vấn đề, mà là làm thế nào để phát hiện đúng vấn đề trong trường hợp nó xảy ra lần nữa (ví dụ: trên một trang web khác)
lá cờ ua
Nếu kết quả cuộn tròn là cần thiết để xây dựng trang, thì bạn phải đợi cho đến khi cuộn tròn không thành công hoặc hết thời gian chờ. Khía cạnh nào của tuyên bố này bạn có thể thư giãn?
user3256843 avatar
lá cờ cn
có lẽ tôi đã không đủ rõ ràng trong việc đặt câu hỏi, điều tôi cần biết là, từ quan điểm "sysadmin", làm thế nào để tìm ra từ thiết bị đầu cuối, trong thời gian nhanh nhất có thể, nguyên nhân gốc rễ của tình huống như thế này nếu nó lại xảy ra chẳng hạn trên một máy chủ khác mà không biết ứng dụng được tạo ra như thế nào và không phân tích ứng dụng.
lá cờ ua
Và gợi ý của tôi là một bước tiến tới điều đó. Tôi có thể có thêm manh mối sau khi bạn trả lời câu hỏi của tôi. (Khi tôi không thể trả lời một câu hỏi, ít nhất tôi cũng cố gắng giúp gỡ lỗi.)
user3256843 avatar
lá cờ cn
Tôi sẽ cố gắng giải thích bản thân tốt hơn: khi tôi phát hiện ra sự cố trên ứng dụng, tôi hoàn toàn biết rằng để giải quyết vấn đề này, thời gian chờ phải được đặt cho lệnh gọi curl không phản hồi (hoặc lệnh gọi curl phải bị vô hiệu hóa hoàn toàn) nhưng việc khắc phục ứng dụng được viết kém không phải là một phần công việc của tôi... Câu hỏi được đặt ra vì nhu cầu của tôi là với tư cách là một sysadmin - để xác định nguyên nhân cốt lõi của vấn đề mà không cần biết gì về ứng dụng cơ bản trong thời gian nhanh nhất có thể với trình bao trước mặt tôi.
lá cờ ua
Một giai thoại: Nhiều năm trước, tôi có một chương trình thực hiện rất nhiều kiểu uốn tóc. Lâu lâu nó lại bị treo. Sau khi nghiên cứu khá nhiều và hỏi các chuyên gia, tôi đã đi đến kết luận rằng có thứ gì đó rất thấp trong HĐH đã gây ra sự cố. Tôi có thể liên tục chỉ ra rằng thời gian treo chính xác là 80,0 giây. Điều này, tất nhiên, là không thể chấp nhận được. Nhưng tôi không thể tìm thấy cách giải quyết trong chuỗi. (Có thể sử dụng nhiều luồng sẽ cho phép tôi tiếp tục xử lý, nhưng tôi không muốn đến đó.)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.