簡體   English   中英

在 kube.netes pod 中發生 OOM 時保留堆轉儲?

[英]Persist heap dump in case of OOM in kubernetes pod?

當 java 進程出現 OOM 並且 pod 重新啟動時,我需要保留堆轉儲。

我在 jvm 參數中添加了以下內容

-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dumps

...並且 emptydir 安裝在同一路徑上。

但問題是,如果 pod 重新啟動並且它被安排在不同的節點上,那么我們將丟失堆轉儲。 即使 pod 被安排到不同的節點,我如何保留堆轉儲?

我們正在使用 AWS EKS,並且我們有超過 1 個 pod 副本。

有人可以幫忙嗎?

您必須將堆轉儲持久保存在 Pod 之間的共享網絡位置上。 為了實現這一點,您需要提供持久卷聲明,在 EKS 中,這可以使用安裝在不同可用性區域上的彈性文件系統來實現。 您可以通過閱讀本關於基於 EFS 的 PVC 的指南來開始了解它。

由於在您的情況下寫入 EFS 太慢,AWS EKS 有另一種選擇 - awsElasticBlockStore

EBS 卷的內容會保留,並且在刪除 pod 時會卸載該卷。 這意味着 EBS 卷可以預先填充數據,並且數據可以在 pod 之間共享。

注意:您必須先使用 aws ec2 create-volume 或 AWS API 創建一個 EBS 卷,然后才能使用它。

使用 awsElasticBlockStore 卷時有一些限制:

  • 運行 pod 的節點必須是 AWS EC2 實例
  • 這些實例需要與 EBS 卷位於同一區域和可用區
  • EBS 只支持單個 EC2 實例掛載卷

請查看有關此主題的官方 k8s 文檔頁面 以及如何在 EKS 中使用持久存儲

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM