代码之家  ›  专栏  ›  技术社区  ›  Jitesh Sojitra

在容器中运行作业一小时后,由于内存不足,Java进程被终止

  •  0
  • Jitesh Sojitra  · 技术社区  · 6 年前

    我已经设置了一个在CircleCI中运行自动化测试的作业( https://hub.docker.com/r/jiteshsojitra/docker-headless-vnc-container ),它工作得很好,但在运行测试一小时后,它达到了内存限制,并突然停止了运行Java/ant作业。那么,有没有办法增加容器内存,使测试可以在容器或其付费功能中运行5-6个小时呢?

    我试着 - JAVA_OPTS: -Xms512m -Xmx1024m 在YAML脚本中,但总体容器内存大小达到了大约4GB。

    参考文献:

    https://circleci.com/gh/jiteshsojitra/zm-selenium/231
    https://circleci.com/api/v1.1/project/github/jiteshsojitra/zm-selenium/231/output/106/0?file=true
    

    日志跟踪:

    BUILD FAILED
    /headless/zm-selenium/build.xml:348: Java returned: 137
    
    Total time: 76 minutes 26 seconds
    Exited with code 137
    
    Hint: Exit code 137 typically means the process is killed because it was running out of memory
    Hint: Check if you can optimize the memory usage in your app
    Hint: Max memory usage of this container is 4286337024
    according to /sys/fs/cgroup/memory/memory.max_usage_in_bytes
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   fiskeben    6 年前

    我们遇到了这个问题。 It is a limit in CircleCI (or the VM, really) 。唯一的解决方案是让你的应用程序使用更少的内存。

        2
  •  0
  •   halfer KingofBliss    6 年前

    菲斯克本是对的。我想你提到的集装箱是我们的叉子 consol/docker-headless-vnc-container 形象因此,您可以在启动脚本中添加以下行。

    # set correct java startup
    export _JAVA_OPTIONS="-Duser.home=$HOME -Xmx${JVM_HEAP_XMX}m"
    # add docker jvm flags, can maybe removed with JDK9
    export _JAVA_OPTIONS="$_JAVA_OPTIONS -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
    

    JVM_HEAP_XMX JVM应该使用的兆字节数,例如。

    docker run -e JVM_HEAP_XMX=512 ... 
    

    如果要动态确定大小,请查看该脚本 jvm_options.sh