perf(docker): Phase 1 效能優化——OPcache revalidate 調校、composer 重裝修正、healthcheck 修復 #33

Merged
a620906209 merged 1 commits from perf/phase1-opcache into master 2026-06-11 15:20:42 +00:00
Owner

摘要

本機 API 延遲 2.5s → 0.2s(約 10 倍)。三個修正都對 VPS 同樣適用且有益。

根因修正(重要)

初版優化計畫判定「OPcache 被停用」是錯誤診斷(CLI 量測假象,opcache.enable_cli 預設關)。fpm 的 OPcache 一直開著,真凶是:

  1. revalidate_freq=2 × Windows bind mount:每 2 秒重新 stat ~850 個腳本。鐵證:2 秒窗口內 0.23s、窗口外 2.5s
  2. entrypoint composer 用 mtime 比對:git 分支操作後每次開機重跑 install(數分鐘 502)
  3. healthcheck wget localhost 先解析 ::1,nginx 只 listen IPv4 → 永遠 unhealthy

變更

  • docker/php/local.ini:revalidate_freq 2→30、memory 192M、max_files 20000
  • docker/php/docker-entrypoint.sh:composer 改 lock 內容比對(vendor/.composer.lock.installed 標記檔)
  • docker-compose.yml:healthcheck 改打 127.0.0.1
  • 量測數據與修正後的根因分析寫回 docs/analysis/2026-06-11-performance-optimization-plan.md

驗收實測

每 5 秒一次:1.96s(cron 突波)、0.22、0.21、0.20、0.27、0.26
閒置 35s 後:1.19s(revalidate,每 30s 至多一次)→ 0.30s
nginx:healthy ✓

部署注意(VPS)

  • merge 後 VPS 需 docker compose build app && docker compose up -d app(ini 與 entrypoint 都 build 進 image)
  • 開發時程式碼變更最多 30s 生效;要立即生效:docker compose exec app kill -USR2 1
  • Phase 2(vendor named volume)未達觸發條件(穩態 0.2s),暫緩

🤖 Generated with Claude Code

## 摘要 本機 API 延遲 **2.5s → 0.2s**(約 10 倍)。三個修正都對 VPS 同樣適用且有益。 ## 根因修正(重要) 初版優化計畫判定「OPcache 被停用」是**錯誤診斷**(CLI 量測假象,`opcache.enable_cli` 預設關)。fpm 的 OPcache 一直開著,真凶是: 1. **`revalidate_freq=2` × Windows bind mount**:每 2 秒重新 stat ~850 個腳本。鐵證:2 秒窗口內 0.23s、窗口外 2.5s 2. **entrypoint composer 用 mtime 比對**:git 分支操作後每次開機重跑 install(數分鐘 502) 3. **healthcheck wget localhost** 先解析 ::1,nginx 只 listen IPv4 → 永遠 unhealthy ## 變更 - `docker/php/local.ini`:revalidate_freq 2→30、memory 192M、max_files 20000 - `docker/php/docker-entrypoint.sh`:composer 改 lock 內容比對(`vendor/.composer.lock.installed` 標記檔) - `docker-compose.yml`:healthcheck 改打 127.0.0.1 - 量測數據與修正後的根因分析寫回 `docs/analysis/2026-06-11-performance-optimization-plan.md` ## 驗收實測 ``` 每 5 秒一次:1.96s(cron 突波)、0.22、0.21、0.20、0.27、0.26 閒置 35s 後:1.19s(revalidate,每 30s 至多一次)→ 0.30s nginx:healthy ✓ ``` ## 部署注意(VPS) - merge 後 VPS 需 `docker compose build app && docker compose up -d app`(ini 與 entrypoint 都 build 進 image) - 開發時程式碼變更最多 30s 生效;要立即生效:`docker compose exec app kill -USR2 1` - Phase 2(vendor named volume)未達觸發條件(穩態 0.2s),暫緩 🤖 Generated with [Claude Code](https://claude.com/claude-code)
a620906209 added 1 commit 2026-06-11 15:16:23 +00:00
實測修正根因:fpm 的 OPcache 本來就啟用(初版診斷是 CLI 假象),
真凶是 revalidate_freq=2 在 Windows bind mount 上每 2 秒重新 stat
全部腳本——窗口內 0.23s、窗口外 2.5s。

- local.ini:revalidate_freq 2→30、memory 192M、max_files 20000
  (程式碼變更最多 30s 生效,立即生效用 kill -USR2 1 平滑重載)
- entrypoint:composer 重裝改用 lock 內容比對,git 分支操作不再
  觸發開機重裝(原 mtime 比對造成數分鐘 502 窗口)
- healthcheck:localhost→127.0.0.1(busybox wget 先解析 ::1 而
  nginx 只 listen IPv4,導致永遠 unhealthy)

驗收:穩態 0.20~0.27s(修復前 2.3~2.5s,約 10 倍);nginx healthy。
量測數據已寫回優化計畫文檔。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
a620906209 merged commit 99651b0bac into master 2026-06-11 15:20:42 +00:00
a620906209 deleted branch perf/phase1-opcache 2026-06-11 15:20:42 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: a620906209/CFDivePlatform#33