k8s pod自動重啟原因(jvm內存設置)


轉載:https://blog.csdn.net/yzh_1346983557/article/details/89216494

 

 

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。

解決:在啟動的腳本中顯示聲明jvm內存-Xms、-Xmx參數,例:java -Xms1024m -Xmx1024m -jar app.jar

也可能是設置了docker容器的內存限制,制作的鏡像未對JVM進行配置,那么 JVM默認設置堆棧的大小。這樣,當jvm占用內存超過docker容器限制時,就會出現container 被docker killed情況。解決:一樣是設置jvm內存-Xms、-Xmx參數,注意要小於docker容器的內存限制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM