Отладка OOM на Linux с низкой нагрузкой, очень низким процентом выделения и низким слэбом

Вопрос или проблема

У меня есть сервер Rocky9 (похожий на RHEL) с рабочей нагрузкой только NFS.

Очевидно, есть утечка памяти, и процент использования памяти MemUsed% поступательно увеличился с 1% до 99%. Но нет программ в пространстве пользователей, использующих память (oom-killer убил почти все, прежде чем система зависла), и также лептонизм довольно низкий. Как выяснить, кто съел память?

Уже обновлён до актуальной версии из репозитория дистрибутива. Также пробовал последний ванильный ядро LTS из el-repo.

/proc/meminfo за несколько мгновений до того, как произошла OOM и сбой:

MemTotal:       394292660 kB
MemFree:         1551296 kB
MemAvailable:    6776108 kB
Buffers:            1712 kB
Cached:          7340144 kB
SwapCached:         4308 kB
Active:           325936 kB
Inactive:        7071836 kB
...
KReclaimable:     129816 kB
Slab:             331596 kB
SReclaimable:     129816 kB
SUnreclaim:       201780 kB
...
VmallocUsed:      319528 kB

Подал сообщение об ошибке на kernel.org, но ответа не последовало даже через неделю. Логи, такие как dmesg, vmallocinfo и lsmod, были прикреплены туда.

Ответ или решение

Диагностика и устранение OOM (Out Of Memory) на сервере Rocky 9 с низкой нагрузкой

Ситуация, с которой вы сталкиваетесь на вашем сервере Rocky 9, является сложной, однако есть несколько шагов, которые вы можете предпринять для поиска источника утечки памяти и устранения проблемы. Проанализируем ваше описание более подробно.

1. Анализ начальных данных

Согласно предоставленным данным /proc/meminfo, наблюдается следующая картина:

  • MemTotal: 394,292,660 кБ
  • MemFree: 1,551,296 кБ
  • MemAvailable: 6,776,108 кБ
  • Cached: 7,340,144 кБ
  • Active: 325,936 кБ
  • Inactive: 7,071,836 кБ
  • Slab: 331,596 кБ
  • VmallocUsed: 319,528 кБ

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

2. Поиск источников утечки памяти

2.1. Пользовательские процессы

Убедитесь, что в системе нет процессов, использующих аномальное количество памяти. Используйте команды top, htop или ps aux для получения информации о текущих процессах. Обратите внимание на столбец RSS (Resident Set Size) и VSZ (Virtual Memory Size).

ps aux --sort=-%mem | head -n 10

2.2. Проверка инкапсулированных процессов

Некоторые процессы в Linux, в том числе ksoftirqd, могут использовать память, но не отображаются в стандартном выводе. Вы можете использовать cat /proc/[pid]/status для каждого процесса с высоким RSS, чтобы понять, сколько памяти используется.

2.3. Мониторинг системных вызовов

Используйте strace, чтобы отследить системные вызовы и выявить потенциальные утечки. Это потребует запустить strace на подозреваемых процессах и проанализировать их исключения и ошибки.

2.4. Проверка приложений

Поскольку вы упомянули о NFS, проверьте конфигурации и параметры кэша. Иногда проблемы могут исходить от некорректной конфигурации NFS или от использования нестабильных версий клиентских и серверных приложений.

3. Анализ системных логов

Логи системы могут содержать важную информацию о том, что происходило перед срабатыванием OOM. Проверьте следующие файлы:

  • /var/log/messages
  • /var/log/syslog
  • /var/log/dmesg

Эти логи могут предоставить контекст относительно затухающих процессов и других системных событий.

4. Предложения по улучшению мониторинга

Установите утилиты для мониторинга использования памяти в реальном времени, такие как free, vmstat и sar. Это даст вам возможность отслеживать использование ресурсов и время возникновения всплесков памяти.

5. Патчинг и обновление

Учитывая, что вы уже использовали последние версии ядра, убедитесь, что все зависимости и конфигурации на сервере также обновлены. Иногда проблемы могут происходить из-за устаревших библиотек или неправильных конфигураций NFS.

6. Обратная связь с сообществом

Поскольку вы подали отчет об ошибке на kernel.org, присоединяйтесь к обсуждениям и ищите похожие случаи в других ресурсах (форумы, стек операторов). Можно также обратиться к сообществу Rocky Linux и обсудить обнаруженные проблемы.

Заключение

Устранение проблемы утечки памяти на сервере Rocky 9 требует системного подхода. Следуя предложенным шагам, вы сможете постепенно установить источник проблемы и оптимизировать использование ресурсов системы. Удачи в вашем анализе, и не забывайте, что системное администрирование всегда требует бдительности и готовности к поиску нестандартных решений.

Оцените материал
Добавить комментарий

Капча загружается...