Кэши виртуальной памяти Ubuntu поглощают память

Кэши виртуальной памяти Ubuntu поглощают память

У меня есть сервер Ubuntu 9.10 64-bit, который, похоже, использует всю доступную память. Согласно моим графикам munin, почти вся используемая память находится в кэше подкачки, кэше и кэше slab. (Я полагаю, что это означает кэши виртуальной памяти, я прав в своем предположении?)

Когда использование памяти приближается к 100%, некоторые (хотя и не все) системные службы, такие как SSH, становятся вялыми и неотзывчивыми. После перезагрузки системы производительность и использование памяти на некоторое время приходят в норму.

Некоторые интересные подробности:

  • В системе работают Apache 2, MySQL, Munin и sshd.
  • Пики использования памяти происходят в одно и то же время каждую ночь (ровно в 22:00).
  • Похоже, в crontab нет ничего необычного ни для одного из пользователей, ни в /etc/cron.d/*, не говоря уже о чем-то, что могло бы произойти в 22:00.

Мой вопрос в том, как мне выяснить, что вызывает высасывание памяти? Я пробовал обычные утилиты (например, ps, top и т. д.), но ничего необычного не обнаружил.

Есть идеи? Спасибо заранее!

решение1

Вы уверены, что это связано с памятью? Кэши не должны высасывать всю память; они временные и динамические и перераспределяются по мере необходимости активной памяти. Кэши нужны только для ускорения и использования памяти, которая в противном случае пропадала бы зря.

Я бы, наверное, посмотрел, нет ли у вас чего-то еще, что тормозит систему. При использовании Top вы видите высокую загрузку системы? Что это в такие моменты по сравнению с "нормальными" временами? Вы сортируете top на использование ЦП и использование активной памяти?

Вы пробовали запустить iotop, чтобы посмотреть, как работает диск, и проверить, не тормозит ли что-то диск?

Как выглядят все кронтабы?

Делали ли вы снимок экрана ps несколько раз в течение дня и сравнивали его примерно в 10:00, чтобы увидеть, какие процессы появились?

А как насчет сетевых подключений с помощью netstat? Есть ли что-то необычное, поступающее или исходящее из системы в это время?

Похоже, что он перестраивает или индексирует системную базу данных, например, «locate», но это не должно приводить к остановке системы.

решение2

Использование памяти и медлительность являются симптомами одной и той же проблемы. В это время происходит что-то, что заставляет дисковый кэш системы перегружаться. Система использует каждую каплю памяти, чтобы избежать избыточного ввода-вывода на диск, но все равно терпит неудачу.

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

Проверьте наличие какого-либо процесса, который выполняет много дисковых операций ввода-вывода. Например, updatedbили какой-либо скрипт резервного копирования. Если это окажется самодельным инструментом, может помочь изменить его так, чтобы он обходил дисковый кэш, чтобы он не вытеснял другие данные из кэша. Это может помочь, чтобы ioniceон не так сильно наносил вред чувствительным ко времени чтениям.

Связанный контент