使用 JVM 進行檢查點和恢復
協調檢查點恢復 (CRaC) 是一個 OpenJDK 專案,它定義了一個新的 Java API,允許你在 HotSpot JVM 上對應用程式進行檢查點和恢復。它基於 CRIU,這是一個在 Linux 上實現檢查點/恢復功能的專案。
其原理如下:你像往常一樣啟動應用程式,但使用支援 CRaC 的 JDK 版本,例如 BellSoft Liberica JDK with CRaC 或 Azul Zulu JDK with CRaC。然後在某個時刻,可能在執行一些工作負載以透過執行所有常見程式碼路徑來預熱 JVM 之後,你可以使用 API 呼叫、jcmd
命令、HTTP 端點或其他機制觸發檢查點。
然後,執行中的 JVM 的記憶體表示(包括其預熱狀態)被序列化到磁碟,以便稍後快速恢復,可能是在另一臺具有類似作業系統和 CPU 架構的機器上。恢復的程序保留了 HotSpot JVM 的所有功能,包括執行時進一步的 JIT 最佳化。
基於 Spring Framework 提供的基礎,Spring Boot 為應用程式的檢查點和恢復提供支援,並在有限範圍內開箱即用地管理諸如 Socket、檔案和執行緒池等資源的生命週期。對於其他依賴項以及可能處理此類資源的應用程式程式碼,預計需要額外的生命週期管理。
你可以在 Spring Framework JVM 檢查點恢復支援文件 中找到有關支援的兩種模式(“按需對執行中的應用程式進行檢查點/恢復”和“啟動時自動檢查點/恢復”)、如何啟用檢查點和恢復支援以及一些指南的更多詳細資訊。