Tinh Chỉnh Hiệu Năng PHP-FPM và Nginx
Mặc định, PHP và Nginx đã khá nhanh, nhưng với môi trường traffic cao, bạn cần tinh chỉnh chúng. Dưới đây là một số mẹo có thể áp dụng ngay.
PHP-FPM Process Manager
Cài đặt pm trong cấu hình pool www.conf xác định cách các process con được quản lý.
Dynamic (Mặc Định)
Tốt cho server ít RAM, nhưng có thể gây độ trễ khi các process khởi động.
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
Static (Khuyến Nghị Cho Production)
Nếu bạn có nhiều RAM, sử dụng static. Nó giữ một số lượng process cố định sẵn sàng phục vụ request, loại bỏ thời gian khởi động.
pm = static
pm.max_children = 50
Công Thức Tính max_children:
(Tổng RAM - RAM cho OS - RAM cho MySQL) / Kích Thước Trung Bình Mỗi Process PHP
Ví dụ: Nếu bạn có 4GB dành cho PHP và mỗi process sử dụng 60MB:
4096 / 60 ≈ 68
Bật Opcache
JIT compiler của PHP 8 rất tốt, nhưng Opcache vẫn là vua của cải thiện hiệu năng. Nó lưu trữ bytecode script đã biên dịch trong shared memory.
Kiểm tra php.ini của bạn:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
Quan Trọng: Trong production, đặt opcache.validate_timestamps=0. Điều này nói với PHP không bao giờ kiểm tra xem file có thay đổi trên disk hay không, tiết kiệm nhiều I/O filesystem. (Bạn phải restart PHP-FPM sau mỗi lần deploy).
Nginx Worker Process
Thông thường, bạn muốn một worker process cho mỗi CPU core.
# nginx.conf
worker_processes auto;
Tăng số connection mỗi worker nếu bạn xử lý nhiều kết nối đồng thời:
events {
worker_connections 2048;
use epoll;
multi_accept on;
}
FastCGI Buffering
Nếu script PHP của bạn gửi response lớn, Nginx có thể buffer chúng xuống disk, điều này chậm. Tăng kích thước buffer trong block location ~ \.php$:
fastcgi_buffer_size 32k;
fastcgi_buffers 16 16k;
Open File Cache
Cache file descriptor để tiết kiệm các lệnh mở file hệ thống cho asset tĩnh.
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Kết Luận
Tinh chỉnh hiệu năng là nghệ thuật tìm sự cân bằng giữa sử dụng bộ nhớ và tốc độ. Luôn benchmark các thay đổi của bạn bằng các công cụ như ab (Apache Bench) hoặc wrk để đảm bảo chúng thực sự cải thiện hiệu năng.