JVM в Docker контейнере. Сборник диаграмм по управлению памятью

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

План статьи: 

1. Мотивация
2. Развлекательная часть (можно пропустить):
2.1. Теоретическая ситуация
2.2. Теоретическая проблема
2.3. Теоретическое решение
3. Основная часть:
3.1. Диаграммы
3.2. Заключение

Мотивация

В интернете огромное количество статей и диаграмм на эту тему, однако, по моему мнению, ни одна из них не позволяет сформировать общее представление об использовании памяти приложения на основе JVM, работающего в Docker контейнере. А без общего представления довольно сложно находить решения конкретных проблем в сложных системах. В результате, я решил выложить свои диаграммы. Уверен, они могут быть полезны в целях устранения пробелов в знаниях, в качестве отправной точки для изучения материала глубже и в помощь для решения конкретных задач и проблем на проекте.

Развлекательная часть (Можно пропустить)

Ситуация
Вы ведете разработку ПО, к примеру, для автоматизированного управления плантацией картофеля на планете Марс. ПО должно работать на легких, энерго эффективных портативных устройствах, типа Raspberry Pi. Также данное ПО не должно выходить за рамки выделенных ресурсов, так как на одном устройстве запущены иные ресурсоёмкие процессы. (Все требования перечислять не буду)... В результате изучения различных вариантов и проведения сравнительных испытаний, Вы приняли решение начать разработку ПО, которое будет запускаться на JVM в Docker контейнерах, с установленными ограничениями на использование ресурсов системы.

Проблема
В процессе тестов производительности Вы столкнулись с ситуацией, когда Docker контейнер крашится и перезапускается по причине превышения установленных лимитов по потреблению памяти, несмотря на то что размер Java Heap остается в допустимых пределах.

Решение
Необходимо разобраться, что может быть причиной потребления памяти в данном Docker контейнере, помимо Java Heap, настроить мониторинг, найти и устранить данную причину. В этом нам помогут диаграммы указанные ниже.
(В данном теоретическом примере, причинами утечки памяти были неверно сконфигурирована embedded RocksDB, вызываемая через rocksdbjni и самописная библиотека на C++, которая вызывалась через JNI)

Основная часть

Диаграммы

Упрощенная диаграмма использования памяти JVM в Docker контейнере:

Упрощенная диаграмма использования памяти JVM в Docker контейнере
Упрощенная диаграмма использования памяти JVM в Docker контейнере

Детализированная диаграмма использования памяти JVM в Docker контейнере с некоторыми параметрами:

Заключение

Данные диаграммы не имеют цели дать полные знания, но они могут стать отправной точкой в изучении темы глубже, восполнении пробелов в знаниях, тюнингу JVM и поиску проблемы в текущей системе.

Конструктивная критика, предложения и замечания приветствуются.

Источник: https://habr.com/ru/post/556268/


Интересные статьи

Интересные статьи

Задача: Закрыть все входящие соединение, кроме определенных ip адресов. Имеется тестовая среда, состоящий из linux и трех windows c статическими ip адресами. На linux установлен docker образам...
Тема монорепозитория обсуждалась уже не раз и, как правило, вызывает весьма активные споры. Создавая werf как Open Source-инструмент, призванный улучшить процессы сборки кода приложений из Gi...
Лучше поздно, чем никогда. Или как мы чуть не допустили серьёзную ошибку, не имея поддержки обычных Dockerfiles для сборки образов приложения. Речь пойдёт про werf — GitOps-утилиту, котора...
Если Вы используете в своих проектах инфоблоки 2.0 и таблицы InnoDB, то есть шанс в один прекрасный момент столкнуться с ошибкой MySQL «SQL Error (1118): Row size too large. The maximum row si...
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...