Nginx đã tối ưu thì PHP-FPM cũng phải chỉnh theo tài nguyên 12GB RAM / 6 core thì mới đồng bộ, tránh nghẽn ở tầng PHP.


1. Xác định mức memory trung bình mỗi PHP worker

  • PHP-FPM mỗi worker (child process) thường chiếm 20–40MB RAM (WordPress/CI3 thường cao hơn nếu nhiều plugin).
  • Với 12GB RAM → ta tính an toàn ~8GB cho PHP-FPM (phần còn lại cho MySQL, Redis, hệ thống...).
  • 8GB / 40MB ≈ ~200 PHP worker tối đa.
  • Với 6 core → thực tế nên để 60–120 worker để CPU không quá tải khi high-load.

2. File cấu hình PHP-FPM: /etc/php/7.4/fpm/pool.d/www.conf

(hoặc /etc/php/8.x/fpm/pool.d/www.conf nếu bạn dùng version khác)

; User/Group chạy PHP
user = www-data
group = www-data

; Lắng nghe socket (phù hợp Nginx)
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

; Process manager settings
pm = dynamic
pm.max_children = 90        ; số worker tối đa
pm.start_servers = 12       ; số process khởi tạo (theo số core)
pm.min_spare_servers = 12   ; process nhàn rỗi tối thiểu
pm.max_spare_servers = 24   ; process nhàn rỗi tối đa
pm.max_requests = 500       ; mỗi worker xử lý 500 req rồi reset tránh rò rỉ RAM

; Giới hạn tài nguyên
php_admin_value[memory_limit] = 256M
php_admin_value[post_max_size] = 64M
php_admin_value[upload_max_filesize] = 50M
php_admin_value[max_execution_time] = 120

3. Nếu muốn ổn định lâu dài (high traffic) → có thể dùng pm = ondemand

pm = ondemand
pm.max_children = 90
pm.process_idle_timeout = 20s
pm.max_requests = 500
  • Cách này PHP-FPM chỉ tạo process khi có request, idle thì kill sau 20s → tiết kiệm RAM.
  • Hợp với site có traffic dao động mạnh (VD: nhiều giờ thấp tải, thỉnh thoảng spike cao).

4. Điều chỉnh số lượng theo thực tế

  • Nếu site load cao liên tục → giữ pm = dynamic.
  • Nếu site có nhiều idle → chuyển pm = ondemand.
  • Kiểm tra bằng lệnh:
htop -u www-data
  • Nếu max children reached xuất hiện trong log /var/log/php7.4-fpm.log → tăng pm.max_children.

👉 Tóm lại cho máy bạn (12GB RAM, 6 core):

  • Nginx: đã tối ưu worker + cache.
  • PHP-FPM: pm.max_children = 90 là hợp lý, nếu site WordPress nhiều plugin có thể giảm xuống 60 để tránh ăn RAM quá nhiều.