phpenv 一萬用戶級調優 — 變更說明

目標:約一萬註冊用戶/尖峰數百同時在線(非一萬同時請求)。整份 phpenv/ 在 .gitignore,僅影響本機/部署機。

粗算:(FPM max_children + queue numprocs) × memory_limit + opcache ≈ 容器 RAM → (14+8)×256M + ~256M ≈ 6G。

php-fpm www.conf

路徑:phpenv/etc/php-fpm.d/www.conf

  • listen = 9000(Docker 跨容器;勿綁 127.0.0.1)
  • listen.backlog = 2048(尖峰排隊)
  • pm.max_children:5 → 14
  • pm.start_servers = 4、min_spare = 2、max_spare = 6
  • pm.max_requests = 500(防記憶體洩漏)
  • php_admin_value[memory_limit]:2048M → 256M(舊值×children 會打爆容器)
  • request_terminate_timeout = 1800s(對齊 nginx fastcgi_read_timeout)
  • 註解:一萬註冊 ≠ 同時請求;與 queue/ow.yml 配套公式

dlaravel.ini

路徑:phpenv/etc/php/dlaravel.ini

  • memory_limit:拿掉 -1 → 256M(CLI/artisan 預設;FPM 另以 admin 覆寫)
  • opcache:memory_consumption=256、interned_strings_buffer=16、max_accelerated_files=20000
  • 維持 upload_max_filesize/post_max_size = 250M

ow.yml 資源上限

路徑:phpenv/ow.yml

  • php:memory 2.5G → 6G、cpus 2 → 4(FPM+queue+opcache)
  • web:256M → 512M、cpus 0.5 → 1
  • reverb:512M → 1G、cpus 0.75 → 1
  • 註解改為「一萬註冊/尖峰數百在線」與公式說明

queue.conf 與文件

  • phpenv/etc/supervisor/queue.conf:維持 numprocs=8,加註與 FPM 共用 RAM
  • .cursor/rules/phpenv.mdc:資源表改為 6G/max_children=14,並提醒 queue 也要算進容器上限

套用與天花板

容器 RAM 變更需重建(僅 reload FPM 不會更新 deploy.resources):

docker compose -f ow.yml up -d --force-recreate php web reverb

主機若只有 8GB,DB/Reverb/collab 也要吃 RAM,勿再盲目加 children。再往上需更大主機、水平擴展或直傳物件儲存。

建議主機規格(能跑得動)

以下對齊目前 phpenv 調優(php 6G + web/reverb/collab/DB/video)。deploy.resources 是硬上限,平常不會同時打滿,但主機須留 OS/Docker 餘量。

最低可跑(開發/小流量驗證)

  • CPU:4 vCPU
  • RAM:16 GB
  • 磁碟:SSD ≥ 80 GB(映像+日誌+上傳暫存)
  • 說明:可撐目前設定,但尖峰轉檔/多人大檔上傳時容易搶 RAM;不建議當正式「一萬用戶」主機

建議正式單機(約一萬註冊/尖峰數百在線)

  • CPU:8 vCPU
  • RAM:32 GB
  • 磁碟:NVMe SSD ≥ 200 GB(依附件/影片量再加大)
  • 網路:≥ 1 Gbps;對外 HTTPS/WebSocket 穩定
  • 說明:php 6G + reverb 1G + web 0.5G + collab/DB/Redis/video 轉檔尖峰,加 OS 約需此量級才「跑得穩」

較舒適/可再加 FPM children

  • CPU:12–16 vCPU
  • RAM:64 GB
  • 此時可把 php 調到 8–10G、max_children 24–30、queue numprocs 12

容器預算粗算(勿把 limit 加總當成平常用量)

  • php:6G(FPM+queue+opcache)
  • web:0.5G
  • reverb:1G
  • video_converter:尖峰最高 2G(偶發)
  • 另計:MySQL/Redis/collab-gateway/Docker/OS(通常再預留 8–16G)

不建議:主機只有 8 GB 就開 php=6G —— 理論可啟動,但 DB/Reverb/collab 一併上線時幾乎沒餘量,易 OOM。

主機分檔 profiles(參考/套用)

路徑:phpenv/profiles/(詳見該目錄 README.md)

Profile主機FPMqueuephp 容器
host-16g4 vCPU/16GB844G
host-32g8 vCPU/32GB1486G
host-64g12–16 vCPU/64GB281212G

每個 profile 含:tunables.env、dlaravel.ini、queue.conf、fpm-overrides.conf、compose-resources.yml、PROFILE.md。

cd phpenv
./profiles/apply-profile.sh host-32g
docker compose -f ow.yml up -d --force-recreate php web reverb

腳本會先備份到 profiles/.backup-時間戳/ 再改現行設定。

討論交流

想要參與討論嗎?登入即可發表留言。

立即登入
尚無留言,快來留下第一則吧!