Использование совместимой памяти растет.

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

Я использую Ubuntu 20.04.2 LTS с ядром 5.4.0-70-generic. Общая память продолжает накапливаться, пока система не зависнет, так как не остаётся свободной памяти.

Я использую Prometheus + Grafana для мониторинга ресурсов системы, и из их графиков видно, что требуется примерно 4-7 дней с момента перезапуска, пока общая память не достигнет 20 ГБ. Но на этом не останавливается, она продолжает расти, пока я не сделаю другой перезапуск.
Скриншот из Grafana

Такое же количество использования общей памяти можно увидеть с помощью команды free -h.
Скриншот free -h

Использование tmpfs, похоже, низкое:
Скриншот df -h | grep tmpfs

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

$ ipcs -m --human

------ Сегменты общей памяти --------
key        shmid      owner      perms      size       nattch     status      
0x00000000 3145729    martsraits 600          256M     2          dest         
0x00000000 2588677    martsraits 600          512K     2          dest         
0x00000000 1245191    martsraits 600          512K     2          dest         
0x00000000 5832713    martsraits 600          512K     2          dest         
0x00000000 10         martsraits 600          512K     2          dest         
0x00000000 1212427    martsraits 600          512K     2          dest         
0x00000000 12         martsraits 600          512K     2          dest         
0x00000000 1212429    martsraits 600           64M     2          dest         
0x00000000 32785      martsraits 600          512K     2          dest         
0x00000000 2064402    martsraits 600          512K     2          dest         
0x00000000 5537814    martsraits 600          512K     2          dest         
0x00000000 1114138    martsraits 600          512K     2          dest         
0x00000000 8945695    martsraits 600         23,3K     2          dest         
0x00000000 1507360    martsraits 600          512K     2          dest         
0x00000000 2916388    martsraits 600          512K     2          dest         
0x00000000 4816933    martsraits 606          8,2M     2          dest         
0x00000000 4816934    martsraits 606          8,2M     2          dest         
0x00000000 4816935    martsraits 600          128M     2          dest         
0x00000000 3670057    martsraits 600          512K     2          dest         
0x00000000 3309611    martsraits 600          512K     2          dest         
0x00000000 1441844    martsraits 600          512K     2          dest         
0x00000000 2555960    martsraits 600            8M     2          dest         
0x00000000 917564     martsraits 600          512K     2          dest         
0x00000000 3899453    martsraits 600          512K     2          dest     

Сумма столбца размера в ipcs -m составляет всего 500M.

Я только что столкнулся с этим на встроенной системе, и моей проблемой был tmpfs – в частности, там хранятся журналы (мне нужно это изменить), и они занимали слишком много оперативной памяти. И да, в выводе free это показывалось как использование общей памяти.

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

Увеличение использования общей памяти на Ubuntu 20.04.2 LTS: Причины и решения

Использование общей памяти в вашей системе, работающей на Ubuntu 20.04.2 LTS с ядром 5.4.0-70-generic, зашкаливает, что может привести как к замедлению работы системы, так и к её зависанию. Приведенные вами данные и описанные симптомы могут указывать на потенциальные проблемы с управлением памятью, которые нужно тщательно исследовать.

Понимание проблемы

Общая память (шареная память) активно используется для межпроцессного общения (IPC), и при её неправильном использовании может возникнуть утечка памяти. Судя по вашим наблюдениям:

  • Нарастание использования памяти: За 4-7 дней ваш системный мониторинг фиксирует рост использования общей памяти до 20 ГБ и более.
  • Низкое использование tmpfs: С вашего вывода видно, что использование tmpfs невысокое, что указывает на то, что проблема не в кэше временных файлов.
  • Показатели команды ipcs: Полученные данные показывают, что суммарный объем памяти, используемой сегментами общей памяти, составляет всего 500 МБ, что не соответствует вашим наблюдениям о 20 ГБ и более.

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

Шаги для диагностики и устранения

  1. Проверка сегментов общей памяти:
    Используйте команду ipcs -m для проверки всех сегментов общей памяти. Обратите внимание на nattch (количество прикреплений) и статус сегментов. Если вы видите много сегментов с ненужными данными, попробуйте их освобождать.

  2. Мониторинг процесса:
    Запустите top или htop, чтобы отследить процессы, которые могут потреблять память. Вы также можете использовать команду pmap <PID> для детального анализа использования памяти конкретным процессом. Оцените процессы, которые потребляют большое количество памяти, и исследуйте, возможно ли их оптимизировать.

  3. Логи в tmpfs:
    Если у вас есть подозрения, что логи сохраняются в tmpfs и приводят к увеличению использования памяти, выявите их. Возможно, ваше приложение создает слишком много логов. Рассмотрите возможность использования файловой системы на диске для их хранения вместо памяти.

  4. Тестирование утечек памяти:
    Используйте инструменты для диагностики утечек памяти, такие как valgrind, если вы разрабатываете приложения, или systemd-analyze blame для выявления зависших служб.

  5. Обновление ядра и пакетов:
    Убедитесь, что ваша система и ядро обновлены. Обновления могут включать исправления для известных проблем с памятью.

  6. Настройки системы:
    Проверьте настройки вашего сервера. Возможно, параметры, такие как vm.overcommit_memory, изменяют поведение распределения памяти. Настройте эти параметры в соответствии с рекомендациями для вашей архитектуры работы.

Заключение

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

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

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