機房斷電後服務器重啟,數據庫服務 (6大服務依賴鏈) 自動啟動失敗。手動啟動卻成功。排除文件損壞。
Snapshot 服務啟動耗時 150 秒後無後續日志Snapshot 服務啟動時掛起Windows 服務控制管理器 (SCM) 默認 30 秒 啟動超時。超時視為失敗並記錄掛起事件。
Snapshot 啟動時調用 VirtualLock 鎖定兩個 15GB 內存映射文件 (歷史數據緩存 + 補寫緩存)。
開機初始化階段,內存中無這些文件頁面 → 強制從機械磁盤讀取 30GB 數據 → 150 秒遠超 30 秒超時。
Windows 內存管理器 不立即釋放卸載的映射文件頁面。首次啟動讀入內存後,服務失敗退出,頁面駐留在待頁池。
手動再次啟動時,頁面仍在內存 → 零磁盤讀取 → 3 秒完成鎖定。
| 方案 | 優點 | 缺點 |
|---|---|---|
註冊表 ServicesPipeTimeout (DWORD, ms) 延長超時 | 零代碼修改,立竿見影 | 影響所有服務,治標不治本 |
| 優化啟動流程:延後鎖定 / 異步預讀 / 啟動後鎖定 | 根治,啟動時間可控 | 需修改服務代碼,測試成本高 |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control ServicesPipeTimeout = 300000 (5分鐘, 單位毫秒)
日志系統是故障分析的生命線。騷年,乖乖給程序加完善的日志吧!