У меня есть приложение node.js, которое регистрирует использование памяти.
rss: 161509376,
heapTotal: 97697792,
heapUsed: 88706896,
external: 733609
И команда kubectl top pod, которая сообщает, сколько модулей памяти использует.
NAME CPU(cores) MEMORY(bytes)
api-596d754fc6-s7xvc 2m 144Mi
Как выКак видно, приложение узла использует только 93 МБ памяти, а k8s говорят, что модуль использует 144 МБ памяти.
Мы используем alpine в качестве базового образа для приложения node.js.Я проверил необработанный образ Alpine со всеми зависимостями, установленными без фактического запуска приложения, и он занимал около 4-8 МБ памяти.Развертывание имеет установленные пределы.
...
resources:
limits:
memory: 400Mi
cpu: 2
requests:
memory: 90Mi
cpu: 100m
Итак, запрошенная память меньше той, которую показывает мне k8s.Я ожидаю увидеть, что было бы что-то ближе к фактическому потреблению памяти, скажем, 100 МБ.
Как я могу понять, откуда взялась эта дополнительная память?Почему эти числа имеют различие?
Все тесты были запущены на одном модуле (один сервис имеет один модуль, здесь нет ошибок).
Обновление 1.
FROM node:8-alpine
ENV NODE_ENV development
ENV PORT XXXX
RUN echo https://repository.fit.cvut.cz/mirrors/alpine/v3.8/main > /etc/apk/repositories; \
echo https://repository.fit.cvut.cz/mirrors/alpine/v3.8/community >> /etc/apk/repositories
RUN apk update && \
apk upgrade && \
apk --no-cache add git make gcc g++ python
RUN apk --no-cache add vips-dev fftw-dev build-base \
--repository https://repository.fit.cvut.cz/mirrors/alpine/edge/testing/ \
--repository https://repository.fit.cvut.cz/mirrors/alpine/edge/main
WORKDIR /app
COPY ./dist /app
RUN npm install --only=production --unsafe-perm
RUN apk del make gcc g++ python build-base && \
rm /var/cache/apk/*
EXPOSE XXXX
CMD node index.js
Изображение Docker выглядит так.