504 Gateway Time-out 是 Web 運維高頻故障,盲目調整 Nginx/PHP-FPM 超時參數往往治標不治本。本文分享從「調參數」轉向「查慢日誌」的精準定位思路,直擊業務代碼層面的性能瓶頸。
nginx.conf 中 fastcgi_read_timeout、proxy_read_timeoutphp-fpm.conf 中 request_terminate_timeout; php-fpm.conf 或 pool 配置
request_slowlog_timeout = 5s ; 超過 5 秒記錄慢日誌,0 為關閉
slowlog = /var/log/php-fpm.slow.log
慢日誌會記錄完整 PHP 調用堆棧,例如:
[15-Jan-2017 10:30:45] [pool www] pid 12345
script_filename = /var/www/html/api/order.php
[0x00007f8b1c05e8a0] mysqli_query() /var/www/html/lib/db.php:128
[0x00007f8b1c05e720] query() /var/www/html/service/order.php:45
[0x00007f8b1c05e5a0] getOrderList() /var/www/html/api/order.php:22
直觀定位到 mysqli_query() 在 db.php:128 執行緩慢,進而排查 SQL 執行計劃、索引缺失或鎖等待。
504 本質是上游等待下游響應超時。調大超時只是緩兵之計,通過 PHP-FPM 慢日誌直達代碼層面,才能從根上解決性能瓶頸,實現系統穩定性持續提升。