Вопрос или проблема
Я заметил, что в одном из моих узлов управления ceph процесс ceph-mgr завершил работу из-за высокого потребления памяти. Поток, указанный в логах в prometheus. Поэтому предполагается, что prometheus выделил большую память, что в конечном итоге привело к состоянию нехватки памяти у службы ceph-mgr. У нас есть другие управляющие узлы, которые не испытывают той же проблемы. Это не частая проблема. Могу ли я получить экспертное мнение о том, где я могу проверить, почему prometheus внезапно выделил большую память на этом конкретном узле?
tcmalloc: большое выделение 1233903616 байт == 0x5607ecec4000 @ 0x7fa9345f3760 0x7fa934614a62 0x7fa93dbb65c8 0x7fa93dbe6365 0x5607122bac0b 0x5607122baef0 0x5607121e6e6d 0x7fa93dc63de7 0x7fa93dc64cd8 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dbc1994 0x7fa93dc62e5f 0x7fa93dbcaa2b 0x7fa93dc66b9f 0x7fa93dbc2306 0x7fa93dc41b80 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dbc2ea2 0x7fa93dbc3c7e 0x7fa93dbd5f00 0x7fa93dbcaa2b 0x7fa93dc66b9f 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8
tcmalloc: большое выделение 1542381568 байт == 0x56078c6e4000 @ 0x7fa9345f3760 0x7fa934614a62 0x7fa93dbb65c8 0x7fa93dbe6365 0x5607122bac0b 0x5607122baef0 0x5607121e6e6d 0x7fa93dc63de7 0x7fa93dc64cd8 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dbc1994 0x7fa93dc62e5f 0x7fa93dbcaa2b 0x7fa93dc66b9f 0x7fa93dbc2306 0x7fa93dc41b80 0x7fa93dc64087 0x7fa93dc64cd8 0x7fa93dbc2ea2 0x7fa93dbc3c7e 0x7fa93dbd5f00 0x7fa93dbcaa2b 0x7fa93dc66b9f 0x7fa93dc41998 0x7fa93dc64087 0x7fa93dc64cd8
src/page_heap_allocator.h:74] ФАТАЛЬНАЯ ОШИБКА: Нехватка памяти при попытке выделить внутренние данные tcmalloc (байты, размер-объекта) 131072 48
*** Пойман сигнал (Принудительное завершение) **
в потоке 7fa8ab726700 имя_потока:prometheus
2024-12-20T03:48:02.083+0800 7fa92c85c700 -1 получен сигнал: Hangup от ядра (может быть сгенерирован pthread_kill(), raise(), abort(), alarm()) UID: 0
20 дек 18:59:34 storagessd02moc.osp.m1 systemd[1]: Остановка Ceph Manager…
завершение: управление завершением работы после SIGTERM
20 дек 18:59:34 storagessd02moc.osp.m1 ceph-mgr-storagessd02moc[3922]: завершение: Отправка SIGTERM процессу с PID 59
2024-12-20T18:59:34.892+0800 7fa92c85c700 -1 Не удалось открыть ‘/proc/718/cmdline’ ошибка = (2) Нет такого файла или каталога
завершение: Ожидание завершения PID 59 …………………………………………..<!>
завершение: ВРЕМЯ ИСТЕКЛО! Давайте считать, что он погиб и продолжим. Контейнер будет сообщен как ошибочный.
Ответ или решение
Анализ проблемы "Ceph Manager Process Hung за счет высокого использования памяти"
Введение
На вашем узле Ceph Manager наблюдается сбой процесса ceph-mgr
из-за высокого использования памяти, что привело к состоянию Out of Memory (OOM). Ваши подозрения падают на Prometheus как на источник проблем, поскольку в логах были зафиксированы значительные аллокации памяти. Это не частая проблема, но её серьезность требует тщательного анализа.
Описание проблемы
Логи показывают, что Prometheus попытался произвести большие аллокации памяти (1,2 ГБ и 1,5 ГБ), что могло вызвать нехватку ресурсов у ceph-mgr
. Реплики и высокие нагрузки на узлы могут вести к непредсказуемым ресурсным ограничениям, что и произошло в этом случае.
Способы диагностики проблемы
-
Мониторинг использования памяти:
- Проверьте использование памяти на всех узлах Ceph, особенно тех, где работает Prometheus. Используйте такие инструменты, как
htop
илиfree -m
, для того чтобы получить детальную информацию о текущих ресурсах.
- Проверьте использование памяти на всех узлах Ceph, особенно тех, где работает Prometheus. Используйте такие инструменты, как
-
Профилирование Prometheus:
- Проверьте конфигурацию Prometheus. Возможно, он настроен на агрегацию излишнего объема метрик или запрашивает слишком частые обновления. Убедитесь, что интервалы выборки метрик не вызывают чрезмерные нагрузки.
-
Анализ логов:
- Изучите логи Prometheus за период, предшествующий сбою. Убедитесь, нет ли в них сообщений об ошибках или о превышении лимитов памяти.
-
Проверка настроек памяти и резервов:
- Оцените настройки памяти для процессов Ceph и Prometheus. Возможно, стоит увеличить лимиты памяти для этих процессов или проверить, не пересекаются ли они в использовании одних и тех же ресурсов.
-
Использование метрик и алертов:
- Настройте алерты в Prometheus, чтобы уведомления приходили при превышении определенных порогов использования памяти. Это поможет вам вести мониторинг и своевременно реагировать на потенциальные проблемы.
Рекомендации по проведению расследования
-
Анализ изменений конфигурации: Если проблема возникла после изменения конфигурации, узнайте, что именно было изменено. Возможно, это привело к увеличению нагрузки.
-
Обновление версий: Проверьте, используете ли вы актуальные версии Ceph и Prometheus. Иногда обновления содержат важные исправления ошибок и оптимизации производительности.
-
Перезагрузка сервисов: После анализа конфигурации попробуйте перезагрузить Prometheus и Ceph Manager, чтобы освободить ресурсы и сбросить возможные утечки памяти.
-
Использование альтернативной версии: Для долгосрочного решения рассмотрите возможность использования альтернативных инструментов мониторинга, которые могут быть менее ресурсоемкими.
Заключение
Высокое использование памяти процессом ceph-mgr
может быть результатом неправильной конфигурации или аномального поведения Prometheus. Проведение тщательной диагностики и анализа позволит выявить причину проблемы и предотвратить её повторение в будущем. Помните, что своевременное и проактивное управление ресурсами критично для стабильной работы вашей системы.