現象描述
共享主機 (虛擬主機/合租伺服器) 出現「Service Unavailable」、頁面載入超時、CPU 100% 持續、資料庫連線失敗等症狀,往往非單一原因,而是資源爭用鏈條反應。
元凶一:方案選型錯位 — 流量與資源不匹配
- 日 IP 10,000+ 網站卻選擇 80 人合租方案 (建議 10 人或獨立/雲主機)
- 單一站點佔用超過公平份額 CPU/記憶體/IIS 工作程序,導致應用程式池回收頻繁、其他站點連帶受害
- 對策:依據日 PV、並發連線、資料庫大小、腳本複雜度選型;購買前要求服務商提供壓測報告或試用期監控數據
元凶二:高耗資源業務類型不宜共享環境
| 業務類型 | 資源特徵 | 建議部署 |
| 大量下載/影音串流 | 持續高頻寬、磁碟 I/O、長連線佔用 Worker Process | 獨立伺服器 / 物件儲存 (S3/Blob) + CDN |
| 即時聊天/推播/長輪詢 | 大量持久連線、記憶體常駐、WebSocket/SignalR | 獨立 Node.js/Go 服務 + Redis |
| 爬蟲/採集/靜態化生成 | 週期性 CPU/磁碟尖峰、大量資料庫寫入 | 離峰時段 (02:00-06:00) 執行、獨立排程伺服器 |
| 高流量圖片/靜態資源 | 大量小檔案讀取、inode 耗盡、盜鏈放大流量 | CDN + 防盜鏈 (Referer/Token/簽名 URL) |
元凶三:站點內部濫用與維護不善
- 程式堆疊:單一空間安裝 10+ 套 CMS/論壇/商城/測試版本,每套佔用應用程式池、資料庫連線池、排程任務
- 未測試上線:直接上傳含無限迴圈、SQL 注入漏洞、大量記憶體洩漏的程式碼,觸發 CPU 100% / 記憶體耗盡
- 統計/分析腳本:舊版 CNZZ/51LA/Google Analytics 同步載入阻塞渲染,或自建統計表寫入鎖表
- 資料庫損壞/索引缺失:Access/MSSQL 未定期壓縮修復/重建索引,查詢計畫退化為全表掃描
防護與自查清單
- 啟用 防盜鏈:IIS URL Rewrite / Apache mod_rewrite / Nginx valid_referers + 簽名 URL 過期機制
- 定期 清理舊程式、備份檔、日誌檔,保留最近 30 天日誌
- 本地開發環境完整測試 (含壓測) 後再部署生產
- 資料庫維護計畫:每週重建索引、更新統計資料、壓縮 (Access)、DBCC CHECKDB (MSSQL)
- 監控面板設定告警:CPU > 80% 持續 5 分鐘、記憶體 > 85%、應用程式池回收 > 3 次/小時
- 發生異常時,優先檢查 最新上傳/修改的程式、存取日誌 Top IP/URL、慢查詢日誌
服務商端建議
- 實施 資源配額 (CPU/記憶體/頻寬/IOPS) 硬性限制,防止單一租戶佔盡資源
- 提供 獨立應用程式池 隔離,避免單一站點崩潰波及全機
- 定期掃描惡意腳本 (Webshell、挖礦、垃圾郵件發送器)
- 提供 資源使用儀表板 讓用戶自主觀察、優化