現場還原
- 系統基於 Domino 開發,服務 3000 人 IT 企業,日訪問量龐大
- HTTP 進程隨機掛掉:或許一分鐘、或許兩週,頻率雖低但必須根治
- 嘗試過:分析 IBM 代碼、修改自有代碼、請 IBM 技術支援介入 → 全部無效
- 團隊共識傾向:「這肯定是 IBM 的 Bug」或「JDK 問題」,幾乎放棄
轉折點
深入研究發現:Domino 環境下 Java 物件回收與線程模型與標準環境不同。某些操作不可並發執行,原有處理邏輯存在競態條件。
改進與結果
- 調整同步策略、縮小臨界區、避免非線程安全操作並發
- 系統穩定性大幅提升,雖仍有殘留問題但可控
- 後續又發現另一處代碼缺陷,預期可徹底解決
核心感悟
「不要說這是他們的 Bug,問題沒有解決,那就是我們的代碼並不那麼完美。」
- 將責任外推給廠商/平台,只會陷入無力感
- 深入理解運行環境特性,從自身代碼找突破口
- 穩定性是系統級工程素養的體現,而非框架/平台的恩賜