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