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
[25-May-2021 23:37:39] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 3 idle, and 37 total children
[25-May-2021 23:37:42] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 6 idle, and 44 total children
[25-May-2021 23:37:48] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
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
Dịch nôm na là:
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
sudo systemctl restart php7.4-fpm
Nguồn: vinasupport.com