Kubernetes pod被终止并标记为OOMKilled。下面是我的cronjob yaml文件:
kind: CronJob
metadata:
name: test-cron
spec:
schedule: "30 2 1 * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 1
template:
spec:
containers:
- name: test-container
image: <image>
resources:
limits:
memory: 10240Mi
cpu: 4000m
ephemeral-storage: 2Gi
requests:
memory: 10240Mi
cpu: 4000m
ephemeral-storage: 2Gi
args:
- java
- -cp
- /jars/*
- -Xmx9g
- -Xms9g
- -XX:+UnlockCommercialFeatures
- -XX:+FlightRecorder
- -Dcom.sun.management.jmxremote
- -Dcom.sun.management.jmxremote.port=9002
- -Dcom.sun.management.jmxremote.authenticate=false
- -Dcom.sun.management.jmxremote.ssl=false
- com.test.app.TestApplication
restartPolicy: Never
我没有得到OutOfMemoryError在我的java应用程序。其中一个原因可能是使用的内存比yaml中提到的限制要高。但是这怎么可能呢,因为Xmx设置是9GB,如果堆使用试图超过9GB,那么我的应用程序应该抛出OOM错误。
我尝试做的一件事是将pod内存请求和限制增加到15GB,基本上现在Xmx和pod内存请求/限制之间存在很大差异。这次我的pod成功运行了。为什么会成功呢?
问题似乎与分配给pod的内存限制有关。
- -Xmx9g
- -Xms9g
查看上面的参数,Java进程将消耗高达9gb的内存,但分配给pod的最大内存只有1gb。因此,由于内存限制不够,pod正在崩溃。您需要调整内存请求和限制细节。