現象定義
「Service Unavailable」、頁面載入 > 10 秒、CPU 持續 100%、資料庫連線池耗盡、IIS 工作程序頻繁回收 — 多見於共享主機/虛擬主機/資源受限雲主機。
成因一:方案選型與流量嚴重錯位
- 日均 PV 10 萬+ (約 1,000 並發) 卻使用 50-100 人合租方案 (建議獨立/雲主機 4C8G 起)
- 單一站點佔用超過公平份額 CPU/記憶體/頻寬/IOPS,觸發主機商資源限制或影響同機其他站點
- 對策:依據 峰值並發、資料庫大小、腳本複雜度、靜態資源量 選型;要求試用期監控數據或壓測報告
成因二:不適合共享環境的高耗資源業務
| 業務類型 | 資源特徵 | 建議架構 |
| 大檔案下載/影音串流 | 持續高頻寬、磁碟 I/O、長連線佔用 Worker | 物件儲存 (S3/MinIO) + CDN + 簽名 URL 過期 |
| 即時通訊/推播/長輪詢 | 萬級持久連線、記憶體常駐、WebSocket | 獨立 Node.js/Go 服務 + Redis Pub/Sub |
| 爬蟲/採集/靜態化生成 | 週期性 CPU/磁碟尖峰、大量 DB 寫入 | 離峰排程 (02-06 點) + 獨立排程節點 |
| 高流量圖片/靜態資源 | 大量小檔案讀取、inode 耗盡、盜鏈放大 | CDN + Referer/Token 防盜鏈 + 圖片壓縮/WebP |
成因三:站點內部濫用與維護缺失
- 程式堆疊:單一空間裝 10+ 套 CMS/測試版/備份舊版,各佔應用程式池、連線池、排程
- 未測試上線:含無限迴圈、SQL 注入、記憶體洩漏、遞迴調用的程式碼直接上線
- 統計/分析腳本拖慢:同步載入第三方統計 (舊版 CNZZ/51LA)、自建統計表寫入鎖表
- 資料庫失調:Access 未壓縮修復、MSSQL 索引碎片 > 30%/統計資料過期、MySQL 慢查詢無索引
自查與防護清單 (可列印貼工位)
- 防盜鏈:Nginx
valid_referers + map 簽名 URL / Apache mod_rewrite / IIS URL Rewrite
- 定期清理:刪除舊版程式、備份包、超過 30 天存取日誌、tmp 檔案
- 本地全流程測試:功能 + 壓測 (ab/wrk/JMeter) + 靜態分析 (SonarQube/CodeQL)
- 資料庫維護計畫:
- Access:每週
Compact & Repair
- MSSQL:每週重建索引 (
ALTER INDEX ... REBUILD)、更新統計 (UPDATE STATISTICS)、DBCC CHECKDB
- MySQL:
ANALYZE TABLE、OPTIMIZE TABLE、啟用 slow_query_log
- 監控告警閾值:
- CPU > 80% 持續 5 分鐘
- 記憶體 > 85%
- 應用程式池回收 > 3 次/小時
- 資料庫連線池使用率 > 80%
- 磁碟剩餘 < 15%
- 異動時優先檢查:最新部署程式、存取日誌 Top 20 IP/URL、慢查詢日誌、錯誤日誌
服務商端最佳實務
- 硬性資源配額 (Cgroups/LVE/IIS CPU 節流)
- 強制獨立應用程式池隔離
- 定期掃描 Webshell/挖礦/垃圾郵件腳本
- 提供租戶自助資源儀表板 (Grafana/Prometheus/主機商面板)
- 異常流量自動限流 + 通知租戶