Vào 1 ngày đẹp trời hay mưa gì đó, bỗng nhiên server của bạn chạy ì ạch. Bạn vào kiểm tra log và vô tình phát hiện ra có quá nhiều truy cập request tới server của bạn. Dưới đây là log của PHP-FPM được lưu tại tại: /var/log/php7.4-fpm.log
Nó báo hiện cho bạn rằng server của bạn quá bận rộn đã đến lúc bạn cần cấu hình lại để tối ưu cho dịch vụ PHP-FPM của bạn.
Cấu hình tối ưu pm.max_children cho PHP-FPM (Version 7.4)
Chúng ta cần sửa file config của PHP-FPM tại đường dẫn: /etc/php/7.4/fpm/pool.d/www.conf
Và thiết lập các thống số sau:
[php-fpm-pool-settings]
pm = dynamic
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
Vậy đâu ra các con số này? Chúng ta tính dựa vào công thức sau:
pm.max_children = Total RAM dedicated to the web server / Max child process size
pm.max_children = Tổng RAM của Server / RAM sử dụng cho mỗi PHP-FPM process
Để tính số RAM sử dụng bởi mỗi 1 php-fpm child process
ps --no-headers -o "rss,cmd" -C php-fpm7.4 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
Cấu hình tối ưu pm.start_servers cho PHP-FPM
Các tham số khác như doc của PHP-FPM
Sau đó lưu lại file và restart lại dịch vụ php-fpm
systemctl restart php7.4-fpm