首頁 / 最新資訊 / 網站出現 503 Service Unavailable 怎麼辦?PHP-FPM 與主機資源排查指南
2026-06-12 · 最新資訊

網站出現 503 Service Unavailable 怎麼辦?PHP-FPM 與主機資源排查指南

網站出現 503 Service Unavailable,通常與 PHP-FPM 程序不足、記憶體耗盡、網站流量增加、程式卡住或主機服務異常有關。本文整理 cPanel、aaPanel、1Panel 與一般 Linux 主機的排查順序。

網站突然顯示 503 Service Unavailable,通常代表網站服務暫時無法處理新的請求。

和 500 錯誤不同,503 比較常見於 PHP-FPM 程序已滿、主機記憶體不足、網站流量突然增加、程式執行時間過長,或 Web Server 無法連線到 PHP 處理服務。

有些網站重新整理幾次後會恢復,但如果 503 持續或反覆發生,通常代表主機資源或程式效能已經出現問題。

先提醒:重啟 PHP-FPM 可能讓網站暫時恢復,但如果沒有找出程序塞滿或記憶體不足的原因,503 通常還會再次出現。

503 Service Unavailable 常見症狀

  • 網站偶爾正常,流量一高就出現 503。
  • 前台可以開啟,但後台、搜尋或報表功能容易失敗。
  • 重新啟動 PHP-FPM 後暫時恢復。
  • 網站同時出現 502、503 或 Gateway Timeout。
  • 主機控制面板顯示 PHP-FPM 程序數已達上限。
  • 伺服器記憶體或 Swap 使用量很高。
  • 網站受到大量爬蟲、掃描或惡意請求。
  • 資料庫查詢很慢,造成 PHP 程序長時間無法釋放。

1)先確認 PHP-FPM 是否正在執行

一般 Linux 主機可先查看 PHP-FPM 服務狀態:

systemctl status php-fpm

如果主機安裝多個 PHP 版本,服務名稱可能不同,例如:

systemctl status php72-php-fpm
systemctl status php74-php-fpm
systemctl status php81-php-fpm
systemctl status php82-php-fpm

若服務已停止或啟動失敗,可以查看最近紀錄:

journalctl -u php-fpm -n 100

不同主機環境的服務名稱與紀錄位置不一定相同。cPanel、aaPanel、1Panel 也可能使用各自管理的 PHP-FPM 服務。

2)查看 PHP-FPM 與 Web Server 錯誤紀錄

503 的真正原因通常會出現在 PHP-FPM、Apache、Nginx 或 LiteSpeed 的錯誤紀錄。

tail -100 /var/log/php-fpm/error.log
tail -100 /var/log/nginx/error.log
tail -100 /var/log/httpd/error_log
tail -100 /var/log/apache2/error.log

cPanel/WHM 主機也可查看:

tail -100 /usr/local/apache/logs/error_log

常見關鍵字包括:

  • server reached pm.max_children setting
  • Resource temporarily unavailable
  • Connection reset by peer
  • connect() to unix socket failed
  • upstream timed out
  • Out of memory
  • child exited on signal

重點:如果紀錄出現 server reached pm.max_children setting,代表 PHP-FPM 可用程序已被占滿,新的請求只能等待或直接失敗。

3)檢查 pm.max_children 是否太低

PHP-FPM 的 pm.max_children 代表同一個 Pool 最多可以同時執行多少個 PHP 程序。

設定太低時,只要同時請求稍微增加,就可能出現程序不足;但設定過高,也可能讓 PHP 一次吃光主機記憶體。

pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 500

不能只看別人的設定數字直接照抄。合理的 pm.max_children 要依主機可用記憶體、單個 PHP 程序用量、網站數量與請求執行時間一起判斷。

4)確認主機記憶體是否不足

主機記憶體不足時,Linux 可能啟動 OOM Killer,強制終止 PHP-FPM、MySQL 或其他程序,網站就可能出現 503。

free -m
top
htop

再檢查是否發生 OOM:

dmesg | grep -i "out of memory"
dmesg | grep -i "killed process"

常見原因包括:

  • PHP-FPM 程序數設定過高。
  • MySQL 使用大量記憶體。
  • 網站產生大型報表或圖片。
  • 程式發生無限迴圈。
  • 多個網站同時執行排程。
  • 流量突然增加。
  • 主機沒有足夠 Swap。

5)檢查是否有慢程式占住 PHP 程序

PHP-FPM 程序數滿,不一定代表流量很大,也可能是少數請求執行太久,導致程序一直無法釋放。

  • 資料庫查詢沒有索引。
  • 一次讀取大量資料。
  • 匯出 Excel 或 PDF 花太久。
  • 圖片處理占用大量 CPU 與記憶體。
  • 第三方 API 沒有設定 timeout。
  • 程式等待寄信、金流或 LINE API 回應。

可以啟用 PHP-FPM Slow Log:

request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/www-slow.log

6)檢查 MySQL 是否拖慢整個網站

PHP 程序常常不是自己卡住,而是在等待 MySQL 查詢完成。

mysqladmin processlist

或進入 MySQL 後執行:

SHOW FULL PROCESSLIST;

如果出現大量長時間執行的查詢,應檢查索引、慢查詢、鎖表、未提交交易與一次讀取大量資料等問題。

7)檢查是否有大量爬蟲或異常流量

網站突然出現 503,也可能是短時間收到大量請求。

tail -100 /var/log/nginx/access.log
tail -100 /usr/local/apache/domlogs/example.com

查看請求最多的 IP:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

查看最常被存取的路徑:

awk '{print $7}' access.log | sort | uniq -c | sort -nr | head

建議排查順序

  1. 確認 PHP-FPM 是否正常執行。
  2. 查看 PHP-FPM 與 Web Server 錯誤紀錄。
  3. 確認是否達到 pm.max_children。
  4. 查看記憶體、Swap 與 OOM 紀錄。
  5. 檢查 PHP 慢程式與 MySQL 慢查詢。
  6. 檢查是否有大量爬蟲或惡意請求。
  7. 修正後持續觀察程序數與錯誤紀錄。

遇到 503 時不建議直接做的事

  • 不要只是不斷重啟 PHP-FPM。
  • 不要直接把 pm.max_children 調到很高。
  • 不要只加記憶體卻不查慢程式。
  • 不要忽略 MySQL 慢查詢。
  • 不要把所有異常都歸咎於流量過大。

結論:503 Service Unavailable 通常代表 PHP-FPM 程序、主機記憶體、資料庫或流量已經超過目前環境能承受的範圍。正確做法不是只重啟服務,而是從錯誤紀錄、程序數、記憶體、慢查詢與存取紀錄逐項確認。

守站人可協助排查 cPanel、aaPanel、1Panel 與一般 Linux 主機的 PHP-FPM、503、記憶體、MySQL 與網站效能問題。

LINE 官方帳號