1 頁 (共 1 頁)

www.conf 中具體修改了哪幾行參數與數值

發表於 : 2026-07-27, 11:01
Brave Ye
https://share.google/aimode/ZAyR7SrUOKBjEQOwQ
ram 有16g 在 debian 13.6運行 apache2 php8.5-fpm

擁有 16GB RAM 的伺服器規格非常優秀!在 Debian 13 搭配 Apache2 與 PHP 8.5-FPM 的架構下,如果網站變慢,通常是因為預設的 PHP-FPM 進程數(pm.max_children)太低(預設通常只有 5 塊),完全浪費了這台主機高達 16GB 的記憶體實力,導致訪客稍多時進程不夠用而嚴重排隊。
針對 16GB RAM 的主機,以下為您規劃專屬的高效能 www.conf 配置與排查指南:
## 1. 核心計算:16GB 記憶體能開多少 PHP 進程?

* 系統保留:保留約 4GB 給 Debian 13 系統、Apache2、以及可能存在的 MySQL/MariaDB 資料庫。
* PHP 可用記憶體:剩餘約 12GB(12,288 MB)完全分配給 PHP-FPM。
* 單個進程消耗:一個普通的 PHP 8.5 實際執行進程大約消耗 40MB - 60MB。
* 最大進程數上限:12288 ÷ 50 ≈ 245。為了保證伺服器絕對不崩潰,我們將 pm.max_children 安全地設定在 150 到 200 之間。

------------------------------
## 2. 完美的 /etc/php/8.5/fpm/pool.d/www.conf 參數設定
請打開您的 www.conf,找到對應的欄位,直接修改為以下優化數值(如果原本有設定超時,記得保留超時設定):

; ---- 進程管理模式 (動態調整) ----
pm = dynamic

; ---- 核心數量調整 (針對 16GB RAM 優化) ----
pm.max_children = 150 ; 最大同時生存的進程數(16GB RAM 的安全高標)
pm.start_servers = 20 ; 啟動時立即建立的進程數
pm.min_spare_servers = 15 ; 備用的最小空閒進程數
pm.max_spare_servers = 35 ; 備用的最大空閒進程數

; ---- 防記憶體洩漏與塞車設定 ----
pm.max_requests = 1000 ; 每個進程處理 1000 次請求後自動重啟,釋放可能洩漏的記憶體
listen.backlog = 4096 ; 提高 Apache 轉發過來時的排隊容忍度

; ---- 抓出慢速程式的元兇 (選填,強烈建議開啟) ----
request_slowlog_timeout = 3s
slowlog = /var/log/php8.5-fpm.slow.log

------------------------------
## 3. 套用設定與排查
修改完成後,請依序執行以下指令測試並重新載入服務:

# 1. 檢查 FPM 語法是否正確
sudo php-fpm8.5 -t
# 2. 重新啟動 PHP-FPM 與 Apache2
sudo systemctl restart php8.5-fpm
sudo systemctl restart apache2

## 💡 調整後的關鍵排查點
如果改完上述 16GB 的高併發設定後網站依然很慢,問題就絕對不在 PHP 進程不夠用了,而是被其他地方卡住:

1. 查看慢日誌(Slow Log):
執行 tail -f /var/log/php8.5-fpm.slow.log。如果網站變慢時這裡瘋狂跳出某個 PHP 檔案與 function 名稱,代表是那段程式碼寫不好(例如外部 API 超時、遠端連線卡死),才會把 PHP Worker 扣留住。
2. 檢查資料庫(MySQL/MariaDB):
當 PHP 進程數變多,代表可以同時對資料庫發出更多查詢。如果資料庫沒有做對應的優化或缺乏索引(Index),資料庫會先滿載,進而反向卡死 PHP。


# 1. 更新套件清單
sudo apt update

# 2. 安裝 htop
sudo apt install htop -y

# 3. 啟動 htop 監控畫面
htop

您可以在終端機輸入 htop,看看當網頁變慢時,是 php-fpm 把 CPU 衝高,還是 mariadb/mysqld 把 CPU 衝高?這能幫我們一秒鎖定元兇。



在您使用的 PHP 8.5 版本中,OPcache 已經改為內建且強制的系統核心組件(Built-in Core Extension)。Debian 13 甚至已經沒有 php8.5-opcache 這個單獨的安裝包了,因為它已經直接融合在 PHP 主程式裡。 [1, 2, 3]
如果您的 php.ini 裡完全找不到 [opcache] 的字樣,是因為它預設採用內建的基礎設定執行,或者單純沒有在設定檔中把文字印出來。 [4, 5]
## 🛠️ 兩步直接啟用與微調 OPcache
既然它已經內建,您只需要直接將設定值寫入設定檔的最底部即可。請依照以下步驟操作:
## 步驟 1:修改 php.ini
打開您的 FPM 設定檔:

sudo nano /etc/php/8.5/fpm/php.ini

滑到檔案的最底部,直接貼上以下全新內容: [6]

[opcache]
; 啟用 OPcache 緩存
opcache.enable=1

; 分配 128MB 記憶體來存放快取(16GB RAM 主機非常夠用)
opcache.memory_consumption=128

; 字串緩衝區大小
opcache.interned_strings_buffer=8

; 最大快取檔案數(phpMyChat 的檔案很多,設 10000 很安全)
opcache.max_accelerated_files=10000

; 讓 PHP 隔幾秒去檢查程式碼有沒有被修改過(設 2 秒即可)
opcache.revalidate_freq=2
opcache.validate_timestamps=1

(注意:在 PHP 8.5 中,絕對不要在頂部加上 zend_extension=opcache.so,這會導致 PHP 噴出重複載入的警告錯誤)。 [7, 8]
------------------------------
## 步驟 2:測試並重啟 PHP-FPM
儲存檔案離開後(Nano 編輯器按 Ctrl+O 儲存,Ctrl+X 離開),請務必測試語法並重新載入服務:

# 測試設定檔是否正確
sudo php-fpm8.5 -t
# 重新載入使 OPcache 生效
sudo systemctl reload php8.5-fpm

## 🔍 如何確認 OPcache 已經動起來了?
您可以在終端機直接輸入這行指令,讓 PHP 自檢核心模組:

php -v

如果成功啟用,您會在輸出訊息的下方看到類似 with Zend OPcache v8.5.x... 的字樣,這就代表您的 phpMyChat 已經開始享受記憶體快取的加速快感了!
請問您在貼上並重啟 FPM 後,網頁頻繁重整時排隊變慢的狀況有改善嗎?