Docker na Heroku przekroczony przydział pamięci

0

Witam, jestem załamany. Próbuję już bezskutecznie od kilku dni zoptymalizować zużywaną pamięć przez mój kontener, ale na Heroku wciąż przy starcie mojej apki w Spring Boocie pojawia się błąd:

2021-11-16T14:39:43.245807+00:00 heroku[web.1]: source=web.1 dyno=heroku.152364067.4ead0741-02de-4b30-8781-628c655e5e0d sample#memory_total=840.98MB sample#memory_rss=492.79MB sample#memory_cache=0.03MB sample#memory_swap=348.16MB sample#memory_pgpgin=814490pages sample#memory_pgpgout=863090pages sample#memory_quota=512.00MB
2021-11-16T14:39:43.292468+00:00 heroku[web.1]: Process running mem=840M(164.2%)
2021-11-16T14:39:43.294393+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2021-11-16T14:40:05.323421+00:00 heroku[web.1]: Process exited with status 137

Jak więc widać przydział pamięci został przekroczony o 64.2%.

Nie mam pojęcia co mam poprawić, żeby apka na tym kontenerze poprawnie śmigała na Heroku. Oto mój Dockerfile, który działa:

FROM node:14.16.1-alpine3.13

RUN apk update && \
    apk add --no-cache bash && \
    apk add --no-cache openjdk8 && \
    apk add --no-cache java-cacerts && \
    update-ca-certificates -f && \
    apk add --no-cache sudo && \
    echo "root:kuba" | chpasswd

USER root

RUN echo "kuba" | sudo -S apk add --no-cache curl && \ 
    mkdir -p /usr/local/lib && \
    cd /usr/local/lib && \
    curl https://cli-assets.heroku.com/heroku-linux-x64.tar.gz | tar xz && \
    rm heroku/bin/node && \
    ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku && \
    heroku version

# Setup JAVA_HOME -- useful for docker commandline
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME

# Add an app and listen on port
COPY target/project-server-1.0-SNAPSHOT.jar /
COPY project-91878452-firebase-adminsdk-dxv9z-0db48a2d01.json /
    
EXPOSE 8000
CMD java -jar project-server-1.0-SNAPSHOT.jar

Nie wiem co jeszcze Wam może być przydatne do inwestygacji tej kwestii. Help! ;(

1

To nie wina ani heroku ani dockera. Może masz gdzieś memory leak? Możesz się podzielić kodem apki?

PS. czemu używasz obrazu node:14.16.1 i czemu alpine?

1

Sprawdź ten Dockerfile

FROM node:16.13.0-bullseye-slim

RUN echo "root:kuba" | chpasswd

RUN apt update --yes && \
    apt --yes install \
        build-essential \
        software-properties-common \
        curl \
        gnupg2 \
        ca-certificates \
        ca-certificates-java \
        sudo && \
    rm -rf /var/lib/apt/lists/*

RUN curl "https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public" | apt-key add - && \
    add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/

RUN apt update --yes && \
    apt install --yes \
        adoptopenjdk-8-hotspot && \
    rm -rf /var/lib/apt/lists/*

RUN update-alternatives --set java /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java 

RUN mkdir -p /usr/local/lib && \
    cd /usr/local/lib && \
    curl https://cli-assets.heroku.com/heroku-linux-x64.tar.gz | tar xz && \
    rm heroku/bin/node && \
    ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku

RUN heroku version
RUN java -version

ENV JAVA_HOME /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/

COPY target/project-server-1.0-SNAPSHOT.jar /
COPY project-91878452-firebase-adminsdk-dxv9z-0db48a2d01.json /

EXPOSE 8000
CMD java -jar project-server-1.0-SNAPSHOT.jar

Build apki powinieneś robić w środowisku dockera, tutaj widzę, że masz już jakiś target czyli coś już jest zbudowane.

0

moze lepiej uzyj obrazu

https://hub.docker.com/layers/azul/zulu-openjdk-alpine/11-jre/

  • pokombinuj z opcjami , zamiast cmd:

ENTRYPOINT ["java","-Dserver.port=$PORT","-Xmx268M","-Xss512K","-
XX:CICompilerCount=2","-Dfile.encoding=UTF-8","-
XX:+UseContainerSupport","-Djava.security.egd=file:/dev/./urandom","-
Xlog:gc","-jar","/app.jar"]

ale i tak kod musisz miec optymalny aby nie przekraczac pamieci.

0

Wyglada jakbyś przekroczyl quota na darmowym Heroku: https://devcenter.heroku.com/articles/java-memory-issues#heroku-memory-limits W takim wypadku zaalokowanie wiekszego heapa nie pomoże. Sprobuj ustawic Xmx na mniejsza wartosc (400mb?).

1 użytkowników online, w tym zalogowanych: 0, gości: 1