Khi quản trị website WordPress, lỗi timeout đặc biệt liên quan đến PHP-FPM là một trong những vấn đề phổ biến khiến chủ website đau đầu. Lỗi wordpress php-fpm timeout thường xuất hiện dưới dạng 504 Gateway Timeout, 502 Bad Gateway hoặc “The site is experiencing technical difficulties”. Nguyên nhân cốt lõi nằm ở giới hạn thời gian xử lý của PHP-FPM, nơi script PHP (thường là plugin, theme hoặc cron job) chạy lâu hơn thời gian cho phép. Việc hiểu rõ cơ chế timeout, cách tìm ra giới hạn phù hợp cho từng website, và các bước cấu hình chính xác sẽ giúp bạn giảm thiểu downtime, cải thiện trải nghiệm người dùng và tối ưu hiệu suất hosting WordPress.
PHP-FPM Timeout Là Gì? Vì Sao WordPress Hay Gặp Lỗi Này?

Cơ chế hoạt động của PHP-FPM và timeout
PHP-FPM (FastCGI Process Manager) là một trong những cách xử lý PHP phổ biến nhất trên các máy chủ web như Nginx hoặc Apache. Khi một request từ WordPress đến, PHP-FPM fork ra một worker process để thực thi script PHP. Mỗi worker có một giới hạn thời gian tối đa để hoàn thành công việc, được gọi là “timeout”. Nếu script chạy quá giới hạn này, PHP-FPM sẽ kill process và trả về lỗi gateway timeout cho người dùng.
WordPress thường gặp timeout do tính chất của nó: plugin không tối ưu, theme nặng, cron job chạy xử lý hàng loạt, hoặc gọi API bên thứ ba chậm. Khi số lượng request tăng cao, worker pool cạn kiệt, dẫn đến timeout hàng loạt.
Các loại timeout liên quan đến WordPress và PHP-FPM
Có ba loại timeout chính cần phân biệt:
- PHP execution time limit – max_execution_time trong php.ini, giới hạn thời gian một script PHP có thể chạy.
- PHP-FPM request timeout – request_terminate_timeout trong pool configuration, giới hạn thời gian xử lý một request cụ thể.
- PHP-FPM process idle timeout – process_idle_timeout, thời gian worker không hoạt động sẽ bị kill để tiết kiệm tài nguyên.
Cả ba đều có thể gây ra lỗi 504 nếu không được cấu hình đồng bộ. Thông thường, giá trị mặc định của max_execution_time là 30 giây, request_terminate_timeout thường được set bằng hoặc cao hơn một chút.
Nguyên Nhân Chính Gây Ra WordPress PHP-FPM Timeout
Plugin và theme không tối ưu
Plugin backup, migration, import/export dữ liệu lớn, xử lý ảnh hoặc gửi email hàng loạt thường dễ gây timeout. Một plugin gọi API bên ngoài mà server đó chậm hoặc không phản hồi cũng khiến PHP-FPM chờ đợi vô thời hạn. Theme builder như Elementor, Divi với nhiều phần tử phức tạp cũng có thể làm tăng thời gian render.
Cron job WordPress (wp-cron)
WordPress sử dụng cron giả để lên lịch tác vụ. Khi có nhiều cron job chạy cùng lúc (ví dụ: scheduled post, cache clear, plugin update check), thời gian xử lý có thể vượt quá giới hạn. Lỗi thường thấy: “cron.php is stuck” hoặc 504 sau khi chạy cron.
Cấu hình server chưa phù hợp
Server ảo (shared hosting) thường có các giới hạn rất thấp: max_execution_time = 30s, request_terminate_timeout = 30s. Nếu website WordPress của bạn có traffic lớn hoặc xử lý nhiều dữ liệu, giá trị này hoàn toàn không đủ. Bên cạnh đó, giá trị pm.max_children (số worker tối đa) quá thấp so với lượng request cũng gây ra hàng đợi và timeout.
Hướng Dẫn Chi Tiết Cách Fix WordPress PHP-FPM Timeout

Bước 1: Xác định loại timeout đang xảy ra
Kiểm tra error log của PHP-FPM (thường ở /var/log/php-fpm/ hoặc /var/log/php/). Tìm dòng có chứa “WARNING: [pool www] child X exited on signal 7 (SIGTERM)” hoặc “ERROR: request_timeout”. Nếu thấy request_timeout xuất hiện nhiều, đó là do request_terminate_timeout. Nếu thấy max_execution_time trong PHP log, đó là giới hạn PHP.
Sử dụng plugin Query Monitor hoặc Debug Bar trên WordPress để xem query nào chạy lâu. Cũng có thể dùng lệnh:
tail -f /var/log/php-fpm/www-error.log
Tuyệt đối không dùng code block.
Bước 2: Tăng thời gian timeout trong PHP-FPM pool
File cấu hình pool của PHP-FPM thường nằm ở /etc/php-fpm.d/www.conf (hoặc /etc/php/version/fpm/pool.d/). Tìm và sửa các giá trị sau:
- request_terminate_timeout: tăng lên 120s hoặc 300s cho WordPress. Nếu set thành 0s sẽ không giới hạn (không khuyến khích vì có thể gây crash server).
- request_slowlog_timeout: set thành 5s để ghi log các request chậm, giúp debug.
- slowlog: chỉ định đường dẫn ghi slow log.
Ví dụ cấu hình tối ưu cho WordPress trung bình:
request_terminate_timeout = 120s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/www-slow.log
Bước 3: Tăng max_execution_time trong php.ini
Giá trị này phải bằng hoặc nhỏ hơn request_terminate_timeout. File php.ini thường nằm ở /etc/php.ini hoặc /etc/php/version/cli/ và /etc/php/version/fpm/ (cần sửa cả hai nếu dùng CLI và FPM).
Thay đổi:
max_execution_time = 120
Sau đó restart PHP-FPM:
systemctl restart php-fpm (hoặc service php-fpm restart)
Bước 4: Cấu hình max_children và pm settings
Để tránh quá tải worker, cần tính toán pm.max_children dựa trên RAM khả dụng. Công thức: max_children = (RAM khả dụng – RAM cho OS và services) / (memory usage trung bình mỗi worker). Với WordPress, mỗi worker thường dùng 30-50MB.
Ví dụ: server 2GB RAM, OS dùng 500MB, còn 1500MB cho PHP. Mỗi worker dùng 40MB, vậy max_children = 1500/40 = 37. Nên set khoảng 30 để dư an toàn.
Các giá trị pm (process manager) nên dùng:
pm = dynamic (hoặc ondemand nếu RAM thấp)
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 10
Bước 5: Tối ưu WordPress để giảm thời gian xử lý
- Disable các plugin không dùng, đặc biệt là plugin backup, cron, log.
- Sử dụng caching: WP Rocket, W3 Total Cache, hoặc Cloudflare APO.
- Chuyển các tác vụ nặng (cron, email, backup) ra ngoài WordPress bằng cron job thật trên server, giảm tải cho PHP-FPM.
- Giảm kích thước ảnh, dùng CDN, hạn chế external HTTP request.
Bảng So Sánh Các Giá Trị Timeout Mặc Định và Tối Ưu Cho WordPress
| Thiết lập | Giá trị mặc định | Giá trị tối ưu | Ghi chú |
|---|---|---|---|
| max_execution_time | 30s | 120s – 300s | Có thể thấp hơn nếu không gặp vấn đề |
| request_terminate_timeout | 30s (thường không set) | 120s – 300s | Phải lớn hơn max_execution_time |
| max_input_time | 60s | 120s | Liên quan upload file |
| pm.max_children | 5 | Tính theo RAM (thường 20-50) | Không đặt quá cao tránh OOM |
| memory_limit | 128M | 256M – 512M | WordPress cần tối thiểu 256M |
Sai Lầm Thường Gặp Khi Cấu Hình PHP-FPM Timeout

- Set request_terminate_timeout quá thấp: Dưới 60s thường gây lỗi cho website có nhiều plugin xử lý ảnh hoặc giao dịch.
- Không phân biệt giữa các loại timeout: Một số người chỉ tăng max_execution_time nhưng quên request_terminate_timeout, lỗi 504 vẫn còn.
- Tăng max_children quá lớn so với RAM: Dẫn đến Out of Memory, server chết hoặc swap liên tục.
- Không restart PHP-FPM sau khi thay đổi: Cấu hình không có hiệu lực ngay.
- Set timeout về 0 (không giới hạn): Worker có thể chạy vô thời hạn, chiếm tài nguyên và dẫn đến crash.
- Chỉ sửa file php.ini cli mà không sửa file fpm: Vì PHP-FPM dùng file riêng.
Lưu Ý Quan Trọng Khi Xử Lý WordPress PHP-FPM Timeout
Nếu website của bạn chạy trên VPS hoặc dedicated server, hãy luôn theo dõi tài nguyên bằng các công cụ như htop, netdata, hoặc New Relic. Khi tăng thời gian timeout, đồng nghĩa với việc cho phép script chạy lâu hơn, điều này có thể ẩn giấu vấn đề hiệu năng thực sự. Hãy kết hợp với slowlog để tìm ra root cause: plugin nào, function nào mất nhiều thời gian nhất. Nếu thấy một plugin liên tục chạy chậm, hãy tìm giải pháp thay thế.
Đối với shared hosting, bạn không thể can thiệp sâu vào cấu hình PHP-FPM. Hãy liên hệ hỗ trợ kỹ thuật yêu cầu tăng timeout hoặc chuyển sang VPS. Một số host WordPress managed như Kinsta, WP Engine cho phép tăng timeout qua dashboard.
Nếu website gặp lỗi 502 Bad Gateway liên tục, ngoài timeout, còn có thể do PHP-FPM service bị crash. Kiểm tra file log và cấu hình pm.max_requests (nên set 500-1000 để worker tự động restart sau một số request).
Xử lý cron job timeout riêng
WordPress cron thường bị timeout khi có nhiều plugin xếp lịch. Có thể chuyển sang cron thực bằng cách tắt wp-cron.php trong wp-config.php:
define(‘DISABLE_WP_CRON’, true);
Sau đó tạo cron job trên server chạy lệnh php wp-cron.php mỗi 5 phút. Việc này giúp cron không phụ thuộc vào visitor và giảm timeout.
FAQ – Câu Hỏi Thường Gặp Về WordPress PHP-FPM Timeout

Lỗi 504 Gateway Timeout có khác với 502 Bad Gateway không?
Có. 504 Gateway Timeout xuất hiện khi upstream server (PHP-FPM) không phản hồi trong thời gian cho phép (request_terminate_timeout hết). 502 Bad Gateway thường do PHP-FPM bị crash, không kết nối được socket, hoặc cấu sai fastcgi_pass.
Tôi có nên set request_terminate_timeout thành 0 (không giới hạn) không?
Không. Chỉ khi bạn thực sự hiểu rủi ro. Nếu một script bị lỗi vòng lặp vô hạn hoặc chờ API mãi mãi, worker đó sẽ không bao giờ giải phóng, dẫn đến hết worker và crash server.
Làm sao để biết giá trị timeout hiện tại của PHP-FPM?
Dùng lệnh: php-fpm -i 2>&1 | grep -i timeout. Hoặc tạo file phpinfo.php trong webroot với nội dung , truy cập và tìm dòng max_execution_time.
Sau khi thay đổi cấu hình, cần restart gì?
Cần restart service PHP-FPM và reload Nginx (nếu dùng Nginx). Có thể restart cả hai: systemctl restart php-fpm && systemctl reload nginx.
WordPress có setting nào để tăng timeout không?
Có thể tăng set_time_limit() trong wp-config.php hoặc trong function.php của theme, nhưng cách này chỉ tác động lên max_execution_time của PHP, không thay đổi được request_terminate_timeout. Nó chỉ giải quyết một phần vấn đề.
Plugin backup gây timeout có cách nào khắc phục triệt để không?
Nếu plugin backup thường xuyên gây timeout, hãy chuyển sang backup qua wp-cli hoặc dịch vụ cloud backup (UpdraftPlus, BlogVault) có xử lý chunk lớn. Nếu vẫn muốn dùng plugin, hãy tăng timeout lên 300s và giới hạn kích thước backup mỗi lần.
Kết Luận
WordPress PHP-FPM timeout không phải lỗi khó chịu nếu bạn hiểu đúng bản chất và biết cách cấu hình. Từ việc xác định loại timeout (request_terminate_timeout, max_execution_time, process idle), tăng giá trị hợp lý dựa trên tài nguyên server, đến tối ưu WordPress bằng cách loại bỏ plugin nặng và chuyển cron sang server, bạn hoàn toàn có thể kiểm soát vấn đề. Quan trọng nhất là không nên tăng timeout một cách mù quáng, hãy kết hợp với monitoring để tìm ra căn nguyên thực sự. Một website WordPress ổn định là kết quả của việc cân bằng giữa cấu hình server, tối ưu code và tài nguyên phần cứng. Nếu bạn là chủ website đang gặp lỗi 504, hãy bắt đầu từ các bước cơ bản trong hướng dẫn này, khả năng cao sẽ giải quyết được triệt để.
- WordPress Email Đổi Mật Khẩu Không Gửi? Nguyên Nhân Và Cách Khắc Phục Chi Tiết
- Theme WordPress vs Website Builder: Lựa Chọn Nào Tối Ưu Cho Website Của Bạn?
- WordPress Audio Permissions Lỗi: Nguyên Nhân Và Cách Khắc Phục Triệt Để
- Khắc Phục Lỗi WordPress Email Queue Duplicate – Nguyên Nhân Và Giải Pháp Toàn Diện
- Plugin Membership Không Khóa Nội Dung: Giải Pháp Tối Ưu Cho Website Thành Viên














