Máy chủ của tôi đang chạy Ubuntu 18.04.5 LTS, với ngăn xếp LAMP (PHP 7.4) và phiên bản apache 2.4.29 sử dụng Prefork MPM. Máy chủ của tôi có 16 CPU và 29GB RAM. Máy chủ này lưu trữ 258 trang web.
Bất cứ khi nào tôi khởi động lại máy chủ của mình, tôi nhận thấy (sử dụng lệnh trên cùng) rằng apache đang tạo ra một lượng lớn quy trình. Điều này hoàn toàn quá tải máy chủ. Điều này CHỈ xảy ra khi tôi khởi động lại máy chủ hoặc tôi dừng apache theo cách thủ công (dừng dịch vụ apache2) rồi khởi động apache (khởi động dịch vụ apache2).
Thông thường, đây là đầu ra của top (trong giờ bình thường):
Sau khi khởi động lại hoặc dừng và khởi động apache theo cách thủ công, tải trung bình tăng lên hơn 126,4! Nó từ từ (khoảng 10-15 phút) trở lại bình thường. Trong 5 phút đầu tiên sau khi khởi động lại hoặc dừng và khởi động apache, tải chỉ tăng đều đặn cho đến khi đạt khoảng 126-130.
Đây là cấu hình MPM của tôi (/etc/apache2/mods-enabled/mpm_prefork.conf):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Ngoài ra, KeepAlive đang BẬT, MaxKeepAliveRequests là 100 và KeepAliveTimeout là 2.
Điều rất lạ là tôi đã tạo một bản sao chính xác của máy chủ và đặt một số trang web (6 trang web) trên bản sao và khi tôi khởi động lại hoặc khởi động và dừng apache trên máy chủ sao chép này, hiện tượng này không xảy ra. Đây là một bản sao CHÍNH XÁC của máy chủ được đề cập ở trên, nó chỉ lưu trữ 6 trang web (CÁCH ít lưu lượng truy cập hơn) thay vì 258.
Sự cố này có thể do quá nhiều kết nối máy khách đang chờ apache phản hồi trong quá trình khởi động lại và khi máy chủ apache cuối cùng hoạt động trở lại, nó sẽ tràn ngập apache với các kết nối?
Việc tăng các giá trị trong cấu hình MPM của tôi có thể giúp ích cho việc này không? Tôi đã kiểm tra nhật ký và tôi chưa bao giờ xem qua MaxRequestWorkers.