docker - 如何在 Heroku 中使用 Docker 调试意外的高内存使用?
问题描述
我正在将 Docker 中的一个小应用程序部署到 Heroku。我在本地运行时看到的问题,设置最多需要 400 MB。在 Heroku 上,在运行时,它会飙升至 1.7 GB 的 RAM。
Dockerfile:
FROM bellsoft/liberica-openjdk-alpine-musl:11
ENV PORT=$PORT
ARG ENV
ENV STARTUP_ENV=$ENV
COPY /target/app-0.0.1-SNAPSHOT.jar /app-0.0.1-SNAPSHOT.jar
RUN echo $ENV
CMD java -Dspring.profiles.active=$STARTUP_ENV -Djava.security.egd=file:/dev/./urandom -Dserver.port=$PORT -jar /app-0.0.1-SNAPSHOT.jar
我无法显示代码,但 visualvm 显示 Kotlin 应用程序从未达到超过 80 MB 的 RAM 基准。
我该如何调试这个问题?
PS 应用程序在运行时自动重启的主要问题,我丢失了关键数据。
更新:
由于我没有回答,所以我在Heroku repo中提出了一个问题。
解决方案
这纯粹是 Docker 内部的 java 问题,而不是 Heroku 问题。
我忘了指定-Xms
和-Xmx
键。请注意,默认情况下它们是不同的,因此您需要明确指定允许的 RAM 量,以防止 Heroku 在一段时间后不断地重新启动您的应用程序。
我的 Docker 文件示例:
FROM azul/zulu-openjdk-alpine:11
ENV PORT=$PORT
ARG ENV
ENV STARTUP_ENV=$ENV
ENV VERSION=0.0.1
COPY /target/app-$VERSION.jar /app-$VERSION.jar
RUN echo $ENV
CMD java -Xms256m -Xmx512m -Dspring.profiles.active=$STARTUP_ENV -Djava.security.egd=file:/dev/./urandom -Dserver.port=$PORT -jar /app-$VERSION.jar
推荐阅读
- c# - 使用 selenium c# 确定元素是否在计算机屏幕上可见
- hidden-markov-models - STAN 中的多元发射隐马尔可夫模型
- robotframework - Robot-Framework SSH 库:无密码登录
- html - 单击时更改引导按钮的状态
- java - 是否可以使用 Log4j2 中的 PatternLayout 将 MDC/上下文映射格式化为 JSON?
- angular - ngOnChanges 未被调用
- javascript - svg 没有正确旋转
- python - 如何从 COM 客户端获取 Excel 单元格的值
- visual-studio - 如何使用 Visual Studio 2017 升级 NuGet?
- javascript - GraphQL.js - 时间戳标量类型?