Điểm:2

Apache "đóng băng" vài lần một ngày

lá cờ in
JYD

Tôi viết bài này sau nhiều tuần chiến đấu với sự cố khiến Apache ngừng phản hồi cho đến khi nó được khởi động lại. Nó xảy ra 3/4 lần một ngày, đôi khi sau vài giờ, đôi khi sau vài phút, đôi khi sau một ngày. Không có mối liên hệ nào (ít nhất là không có bằng chứng) với số lượng kết nối đồng thời với máy chủ: nó xảy ra cả trong thời gian lưu lượng truy cập cao (từ 8 giờ sáng - 18 giờ tối) và vào ban đêm khi lượng truy cập rất thấp.

Cấu hình: VM trên Vmware ESXi Rel. 7 - HĐH: Ubuntu 20.04, Apache 2.4.41, PHP 8.0.15, Trình điều khiển MSSQL 17.8.1.1-1. 6 CPU "Xeon(R) Gold 5218", Ram 12Gb. 3 trang web chạy bằng PHP "thuần túy" (không có CMS như Wordpress, Drupal, Ruby On Rails, v.v.). Awstats cho thấy mạng nội bộ không có quyền truy cập bên ngoài phục vụ < 10 nghìn trang mỗi ngày, các mạng khác khoảng 200 nghìn trang được phục vụ mỗi ngày. Hầu hết thời gian sử dụng CPU chiếm khoảng 1% và bộ nhớ được sử dụng khoảng 2Gb. Khi sự cố xảy ra, không phát hiện thấy "đột biến" CPU/Bộ nhớ/mạng.

Lúc đó tôi đã cài đặt và cấu hình Monit kiểm tra cứ sau 20 giây với cuộn trang web PHP tối thiểu này:

<?php
echo "ok";
?>

Thông thường nó in "ok". Trong thời gian "đóng băng", ngay cả trang đơn giản này cũng không được phục vụ; curl kết thúc với lỗi hết thời gian chờ và kích hoạt monit để thực hiện "khởi động lại dịch vụ apache2". Sau 2/3 giây, trang web hoạt động trở lại bình thường (cho đến lần đóng băng tiếp theo).

Theo dõi danh sách các biện pháp khắc phục không thành công (không theo thứ tự thời gian):

  • Đã xóa certbot-Letsencrypt và sử dụng chứng chỉ SSL đã mua của Sectigo
  • Đã chuyển Apache từ mpm_worker sang mpm_event
  • Vô hiệu hóa một loạt các mô-đun của Apache không sử dụng
  • Vô hiệu hóa một loạt các mô-đun PHP không sử dụng
  • Vô hiệu hóa hầu hết các công việc định kỳ không quan trọng (thậm chí không có bằng chứng nào cho thấy việc đóng băng xảy ra trong quá trình thực hiện các công việc định kỳ).
  • Đã thay đổi bộ điều hợp mạng ảo từ VMXNET3 thành E1000
  • Đã bật ghi nhật ký chi tiết: không có thông tin/lỗi hữu ích nào được ghi lại, chỉ cần có khoảng cách thời gian 25-30 giây từ trang cuối cùng được cung cấp ngay trước khi treo trang được cung cấp đầu tiên khi quá trình khởi động lại hoàn tất.
  • Đã bật trong một số ngày mod_log_forensic: không có lỗi (!) nào được báo cáo khi sử dụng tiện ích check_forensic
  • Kiểm tra kỹ một vài quy tắc Viết lại trong .conf và trong .htaccess
  • Đã thay đổi cấu hình của Apache; các giá trị liên quan là:
    Máy chủ khởi động 10
    MinSpareThreads 40
    MaxSpareThreads 120
    ThreadLimit 100
    Chủ đềPerChild 75
    MaxRequestWorkers 450
    MaxConnectionsPerChild 1000

Không có mối tương quan rõ ràng giữa trang/tệp "cuối cùng" được cung cấp trước sự cố: đôi khi là trang PHP (rõ ràng là không giống nhau) đôi khi là hình ảnh png/jpeg. Đọc nhật ký, tôi không thể tìm thấy các yêu cầu bất thường/không đúng định dạng/quá mức của khách hàng.

Sự cố liên quan đến 99,99% Apache, dịch vụ PHP-fpm hoạt động hoàn hảo và không cần thiết phải khởi động lại sau khi đóng băng. Tất cả các dịch vụ đang chạy của máy chủ khác không bị ảnh hưởng.

Trước khi viết ở đây, tôi đã đọc rất nhiều trang web nhưng tôi không tìm thấy bất kỳ gợi ý hữu ích nào (đối với tôi).

cảm ơn adv

chào

JYD

lá cờ jp
Khi Apache bị treo, hãy kiểm tra trạng thái quy trình bằng `ps`. Kiểm tra `mod_status` của Apache. Sử dụng `strace` để tìm hiểu xem các quy trình đang làm gì.
lá cờ fr
Có thể số lượng chủ đề httpd đang ảnh hưởng đến điều này? Vì nó là máy ảo nên có lẽ nó đang chạy trên trình ảo hóa với bộ nhớ ram đang tăng vọt?
lá cờ in
JYD
@AlexD Tôi thêm một dấu vết vào một tệp và tôi sẽ đăng kết quả ở đây
lá cờ in
JYD
@kazak Không có bộ nhớ "balloned", màn hình ESX luôn hiển thị 0 KB. Tất cả 12Gb được dành riêng cho máy ảo này
lá cờ in
JYD
Cuối cùng tôi đã có nó!!!!
lá cờ in
JYD
Vấn đề là trình nền "incron" của hệ thống tệp bị định cấu hình sai và nhật ký của nó bị vô hiệu hóa. Trong tệp cấu hình của nó, một trong những sự kiện đã xem có lệnh thoát sai. Khi tôi kích hoạt tệp nhật ký của incron, .log bắt đầu phát triển hàng trăm dòng/giây và nhanh chóng đạt kích thước hàng chục MB. Hành vi kỳ lạ này là do một ký tự thoát sai trong tệp conf của nó: trong một dòng có "$\" thay vì "\$" tạo ra một điều kiện cuộc đua rất đáng lo ngại. Đã sửa lỗi, lỗi đóng băng của apache đã biến mất.

Đă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.