Метрика KubernetesContainer_memory_usage_bytes — из чего она состоит помимо кучи JVM и некучной памятиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Метрика KubernetesContainer_memory_usage_bytes — из чего она состоит помимо кучи JVM и некучной памяти

Сообщение Anonymous »


У меня есть микросервисы Java Spring-Boot, работающие в Kubernetes (AWS EKS) с сервисной сеткой Istio. Итак, под K8S имеет два контейнера: сам сервис и istio-proxy. Я пытаюсь понять, почему контейнер «служба» потребляет больше памяти, чем сумма значений кучи и не кучи JVM, и такое поведение наблюдается всеми службами, разница составляет примерно 400–600 МБ.

Память контейнера K8S не освобождает память кучи JVM, поэтому учитывается максимальное значение памяти кучи JVM с момента запуска модуля, а не текущее значение. Давайте посмотрим на конкретный модуль, выполнив kubectl описать pod :

Контейнеры: услуга: Ограничения: память: 1408Ми Запросы: память: 1408Ми istio-прокси: Ограничения: память: 512Ми Запросы: память: 512Ми и JAVA_OPTS для службы: -Xms640m -Xmx640m -XX:+UseG1GC

Значения метрик (я преобразовал все значения в мебибайты, МиБ):
[*]
sum(jvm_memory_used_bytes{pod="pod_id", area="heap",Container="service"}) составляет максимум 618 МБ — максимальное использование кучи jvm с момента запуска модуля [*]sum(jvm_memory_used_bytes{pod="pod_id", area="nonheap",Container="service"}) составляет максимум 215 МБ – максимальное использование jvm без кучи [*]так что общее использование jvm составляет максимум 833 МБ (сумма двух вышеуказанных показателей)
[*]
container_memory_usage_bytes{container="service", pod="pod_id" — 1251 МБ
[*]
Значения container_memory_working_set_bytes и container_memory_usage_bytes почти одинаковы с небольшой разницей в МБ.

Я также просмотрел каталог модуля /sys/fs/cgroup/memory, но не нашел основной причины. Вот что у нас есть:
[*]внутри Memory.stat: кэш составляет 13,66 МБ [*]inactive_file — 0,4 МБ [*]active_file – 13 МБ. [*]memory.kmem.usage_in_bytes — 9 МБ
Основываясь на этих показателях, неясно, почему разница между container_memory_usage_bytes и максимальным общим количеством jvm (сумма кучи и не кучи) составляет 418 МБ. На что оно может быть выделено? Это какие-то кэши контейнеров, общая память, собственные возможности ОС или что-то еще? Какие метрики или файлы/процессы модулей могут помочь в этом?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»