使用 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 檢查點恢復支援文件 中找到有關支援的兩種模式(“按需對執行中的應用程式進行檢查點/恢復”和“啟動時自動檢查點/恢復”)、如何啟用檢查點和恢復支援以及一些指南的更多詳細資訊。