使用 JVM 的檢查點與還原

協調檢查點還原 (CRaC) 是一個 OpenJDK 專案,定義了一個新的 Java API,讓您可以在 HotSpot JVM 上檢查點和還原應用程式。它基於 CRIU,一個在 Linux 上實現檢查點/還原功能的專案。

原理如下:您幾乎像平常一樣啟動應用程式,但使用啟用 CRaC 版本的 JDK,例如 BellSoft Liberica JDK with CRaCAzul Zulu JDK with CRaC。然後在某個時間點,可能在一些會通過執行所有常見程式碼路徑來預熱 JVM 的工作負載之後,您可以使用 API 呼叫、jcmd 命令、HTTP 端點或其他機制觸發檢查點。

然後,執行中 JVM 的記憶體表示(包括其預熱狀態)將序列化到磁碟,以便稍後在具有相似作業系統和 CPU 架構的另一部機器上快速還原。還原後的進程保留了 HotSpot JVM 的所有功能,包括在運行時進一步的 JIT 優化。

基於 Spring Framework 提供的基礎,Spring Boot 提供了對應用程式進行檢查點和還原的支援,並開箱即用地管理諸如 socket、檔案和線程池等資源的生命週期 在有限的範圍內。預計其他依賴項以及可能處理此類資源的應用程式程式碼也需要額外的生命週期管理。

您可以在 Spring Framework JVM 檢查點還原支援文件中找到關於兩種支援模式(「運行中應用程式的按需檢查點/還原」和「啟動時自動檢查點/還原」)、如何啟用檢查點和還原支援以及一些指南的更多詳細資訊。