1. Vì sao PHP thường là điểm nghẽn hiệu năng?
Trong rất nhiều hệ thống web, khi website chậm hoặc timeout, phản xạ đầu tiên thường là:
“Nginx yếu”
“Server thiếu CPU”
“Cần nâng cấp máy”
Trong thực tế, rất nhiều vấn đề xuất phát từ:
PHP-FPM chưa được cấu hình phù hợp với tải thực tế.
PHP là lớp:
Xử lý logic
Kết nối database
Thực hiện nhiều thao tác tốn tài nguyên
Nếu không tối ưu:
PHP nghẽn → Nginx trả 502
Website chậm dù CPU còn trống
RAM bị sử dụng không hiệu quả
2. Nguyên tắc tối ưu PHP cho production
Trong loạt bài này, tối ưu PHP tuân theo:
Hiểu tải thực tế trước khi chỉnh
Không copy cấu hình “tối ưu cao cấp” trên mạng
Ưu tiên ổn định hơn tốc độ cực đại
Có thể rollback nhanh
Mỗi thay đổi đều có lý do
Nguyên tắc:
PHP tối ưu tốt là PHP không gây bất ngờ khi tải tăng.
3. Tối ưu PHP-FPM pool (trọng tâm)
3.1. File cấu hình pool PHP-FPM
Ví dụ với PHP 8.3:
Không chỉnh trực tiếp khi chưa backup:
3.2. Chế độ quản lý process (pm)
Khuyến nghị cho production phổ thông:
Lý do:
Tự điều chỉnh theo tải
Ít rủi ro nghẽn đột ngột
3.3. Các tham số quan trọng nhất
Ví dụ cấu hình khởi điểm an toàn:
Giải thích:
pm.max_children: số PHP process tối đaCác giá trị khác giúp PHP phản ứng linh hoạt khi tải tăng
Không nên:
Đặt pm.max_children quá cao khi chưa tính RAM.
4. Cách ước lượng pm.max_children (đúng cách)
4.1. Vì sao không đoán?
Mỗi PHP process:
Tốn RAM
Tùy thuộc CMS, plugin, framework
Đặt sai:
Quá thấp → nghẽn
Quá cao → OOM, sập server
4.2. Cách ước lượng đơn giản
Quan sát RAM mỗi PHP process:
Ví dụ:
Trung bình ~50MB / process
Nếu dành ~1GB RAM cho PHP:
→ pm.max_children = 20 là hợp lý.
5. Tối ưu timeout và request handling
5.1. request_terminate_timeout
Ngăn PHP chạy mãi khi có lỗi:
Giúp:
Tránh process treo
Giải phóng tài nguyên
5.2. max_execution_time (php.ini)
Trong php.ini (FPM):
Không nên:
Đặt quá cao để “cho chắc”.
6. Bật và tối ưu OPcache (bắt buộc cho production)
6.1. Vì sao OPcache rất quan trọng?
OPcache:
Cache opcode PHP
Giảm compile mỗi request
Tăng tốc đáng kể
Trong production:
Không bật OPcache là lãng phí tài nguyên.
6.2. Cấu hình OPcache cơ bản
Trong php.ini:
Giải thích:
Phù hợp đa số website
An toàn cho production
7. Tách pool cho website quan trọng (khi cần)
Với website lớn:
Có thể tạo pool riêng
Cô lập lỗi và tài nguyên
Ví dụ:
Lợi ích:
Một site lỗi không ảnh hưởng site khác
Dễ điều chỉnh tài nguyên riêng
8. Restart PHP-FPM đúng cách
Sau khi chỉnh cấu hình:
Reload:
Không ngắt toàn bộ kết nối
Áp dụng cấu hình mới
9. Theo dõi PHP sau khi tối ưu
Cần theo dõi:
CPU
RAM
Log PHP-FPM
File log:
Không thấy lỗi:
Cấu hình đang ổn định.
10. Những sai lầm phổ biến khi tối ưu PHP
Copy cấu hình “siêu tối ưu”
Đặt pm.max_children quá cao
Không bật OPcache
Không theo dõi sau khi chỉnh
Restart server để “chữa cháy”
Những sai lầm này:
Tạo ra hệ thống khó đoán và dễ sập khi tải tăng.
11. Checklist tối ưu PHP cho production
pm.max_children tính toán có cơ sở
OPcache bật và cấu hình đúng
Timeout hợp lý
Có thể reload không downtime
Theo dõi sau khi tối ưu
12. Bài tiếp theo
Trong Bài 30, chúng ta sẽ chuyển sang lớp dữ liệu:
Tổng quan Database (MySQL/MariaDB) trong Web Server
Bài này sẽ giúp:
Hiểu vai trò DB
Chuẩn bị cho cài đặt và tối ưu DB đúng cách
- Đăng nhập để gửi ý kiến