为什么使用 eclipse-temurin 21 时 kubernetes pod OOMKill

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

我使用 eclipse-temurin jdk 21 作为 docker 基础镜像,并运行一个 java 应用程序。这是 dockerfile:

FROM 192.168.1.2:8084/eclipse-temurin:21-jdk

RUN mkdir -p /app
WORKDIR /app
COPY ./app-start/target/app-core-service.jar app-core-service.jar


ENV TZ=Asia/Shanghai


EXPOSE 8080

CMD java ${JVM_OPTS} -jar app-core-service.jar ${APP_ARGS} --spring.profiles.active=${SPRING_PROFILES_ACTIVE}

这是java应用程序

APP_ARGS
配置:

-Xss512k -Xms128m -Xmx450m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/./urandom -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:31201 -Dcat.enabled=true -Dcat.name=app-core-service-dev
 

这是 kubernetes 资源限制配置:

         resources:
            limits:
              cpu: 2048m
              memory: 1Gi
            requests:
              cpu: 1024m
              memory: 512Mi

但是 kubernetes pod 会通过 OOMKill 重新启动。为什么已经过了 1GB 内存的 Pod 限制,内存还是不够用?当增加内存时,OOMKill消失。 pod如何使用另外512MB内存?

java kubernetes
1个回答
0
投票

JVM 还使用非堆内存,例如线程堆栈或映射的本机内存。这取决于您使用的应用程序和库,并且不能笼统地回答。

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