zoukankan      html  css  js  c++  java
  • 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容器的内存限制。

  • 相关阅读:
    MYSQL[18]
    MYSQL[11]
    hdu 1847
    hdu 2149
    uva 10341
    hdu 1850
    uva 10391字典树
    hdu 2473
    uva 10761
    hdu 1198
  • 原文地址:https://www.cnblogs.com/to-here/p/15233604.html
Copyright © 2011-2022 走看看