在内存不足异常时终止Spring Cloud Task

问题描述 投票:0回答:1

我在PCF上部署了Spring任务应用。此应用程序出现OutOfMemory异常,但不终止任务。许多人建议设置env -XX:OnOutOfMemoryError =“ kill -9%p”解决此问题。如何在PCF上进行设置?

out-of-memory spring-cloud-stream pivotal-cloud-foundry
1个回答
0
投票
https://github.com/cloudfoundry/jvmkill#overview

这将监视您的应用程序中是否存在OOME,如果发生,请打印一些调试信息并终止该应用程序。我相信这正是您在上面讨论的行为,但是与您提到的方法不同,此方法将在终止应用程序之前打印调试信息,而IMHO通常更可靠。

对于在Cloud Foundry上运行的任务,Java buildpack仍会安装Kill Agent,但实际上无法将Kill Agent插入任务的启动命令中。这是因为CF任务完全从用户那里获取启动命令。

关于在CF上启动基于Java的任务的一般建议是采用Java buildpack生成的start命令来运行您的应用程序或具有相同内存限制的另一个应用程序,并对其进行调整以改为启动您的任务。

例如,这是为Spring Music生成的启动命令:

JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc) -Djava.ext.dirs= -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=27062 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/.:$PWD/.java-buildpack/container_security_provider/container_security_provider-1.16.0_RELEASE.jar org.springframework.boot.loader.WarLauncher

注意-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1部分,它将启动jvmkill代理。

现在,如果我想调整它以运行java -version。我可以执行以下操作:

JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc) -Djava.ext.dirs= -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=27062 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -version

请注意我只是如何更改设置了实际Java参数的末尾。

这些命令很长,但是它们确实可以工作,应该为您解决问题。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.