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 提供了對應用程式檢查點和恢復的支援,並 在有限的範圍內 開箱即用地管理諸如套接字、檔案和執行緒池等資源的生命週期。對於其他依賴項以及可能涉及這些資源的應用程式程式碼,預計還需要額外的生命週期管理。
你可以在 Spring Framework JVM 檢查點恢復支援文件 中找到有關兩種支援模式(“按需檢查點/恢復正在執行的應用程式”和“啟動時自動檢查點/恢復”)、如何啟用檢查點和恢復支援以及一些指南的更多詳細資訊。