天天看點

k8s pod自動重新開機原因(jvm記憶體設定)

k8s叢集環境下,docker容器中運作鏡像方式啟動springboot項目。由于制作的鏡像未對JVM的記憶體進行配置,那麼 JVM 會預設設定堆棧的大小,這個大小是根據實體機的記憶體進行配置設定的。 那麼實體機的記憶體越大,預設配置設定的記憶體就越大(最大堆棧=1/4 * 實體機記憶體,初始堆棧=1/64 * 實體機記憶體)。JVM 是不知道自己在Docker容器中運作的,jvm識别的是實體主機的記憶體,而不是k8s給pod配置設定的記憶體或docker容器的記憶體。

是以在沒有給jvm指定記憶體大小的情況下,機器實體記憶體很大時,jvm預設占用的記憶體Xms超出了k8s配置設定給pod的記憶體,導緻pod記憶體溢出,進而k8s不斷重新開機pod。也可能是運作過程中,jvm不斷申請記憶體直到最大堆記憶體Xmx,Xmx超出了k8s配置設定給pod的記憶體,進而k8s自動重新開機pod。

繼續閱讀