Я запускаю приложение Python внутри контейнера Docker. Он периодически загружает некоторые данные с помощью кадра данных Pandas. Примерно раз в месяц контейнер выходит из строя с ошибкой нехватки памяти.
Я не уверен, происходит ли это из-за утечки памяти, которая постепенно поглощает системную память, пока контейнер, наконец, не будет полностью уничтожен. убит, или если поведение является более случайным, так что иногда оно запускается и потребляет гораздо больше памяти, чем обычно.
Я не заметил, чтобы использование системной памяти становилось все выше в течение месяца, что заставляет меня думать, что проблема, вероятно, в последнем, а не в постепенном воспоминании. утечка.
Я подумал, что смогу использовать netdata для мониторинга использования памяти контейнера.
Примечание: существует два возможных способа: может использовать Netdata для мониторинга контейнеров Docker:
- Обычный способ — использовать Netdata для мониторинга контейнеров, запустив его на узле контейнера. Хостом в данном случае является система Debian 12. Версия netdata, доступная через apt, — v1.37.1. Похоже, это сильно устарело, поскольку текущая версия — версия 2... Я не вижу в веб-интерфейсе ничего, что выглядело бы как диаграмма, отслеживающая использование памяти контейнерами Docker. Поэтому я подозреваю, что моя версия слишком старая.
- «Странный» и совсем не рекомендуемый способ, который я пытаюсь сделать, — это установить Netdata внутри самого целевого контейнера Docker. .
Контейнер CMD по-прежнему имеет значение `CMD [.venv/bin/python3", "myPythonApp.py"].
Когда я запускаю контейнере Netdata (что неудивительно) не работает. Я могу запустить его вручную, запустив
Код: Выделить всё
docker exec -it MY_CONTAINER_NAME bash
/usr/sbin/netdata -D
Даже если я запускаю его таким образом, при подключении к netdata экземпляре, работающем внутри контейнера, я обнаружил, что у него есть только одна диаграмма, предназначенная для некоторого измерения джиттера.
Диаграммы, связанные с памятью, отсутствуют.
Подводя итог:
- То, что я пытаюсь здесь сделать, на самом деле неправильный подход.
- Однако, возможно, это можно заставить работать, даже если это немного хак
- li>
Хотя мне удалось установить Netdata внутри Docker-контейнера, я не знаю, как его запустить, поскольку у Контейнера нет systemctl. Есть ли способ запустить процесс netdata при запуске контейнера? Если да, то как это сделать? - Если я запущу netdata вручную, я обнаружу, что нет ни одной из обычных ожидаемых диаграмм, и, что наиболее важно, нет диаграмм мониторинга использования памяти. . Это говорит о том, что какая-то зависимость отсутствует, однако процессы контейнера должны иметь доступ к файлу /proc/meminfo. (Я проверил, есть ли этот файл.)
Подробнее здесь: https://stackoverflow.com/questions/793 ... ata-inside
Мобильная версия