Запуск top
в пакетном режиме для периодического отчета о размерах памяти может быть использован, чтобы увидеть, кто использует память, когда дела идут на юг. Запуск sar
в пакетном режиме должен дать хорошую диагностику использования памяти и связанных с ними операций ввода-вывода. Запуск munin
для мониторинга системы должен дать вам график с хорошей детализацией того, для чего используется память. Это может очень помочь.
Вы можете использовать limit.conf, чтобы ограничить максимальный размер ядра программ. Правильно настроенный, это должно убить все программы, которые имеют утечку памяти. Это работает с модулем pam_limits. Пределы также могут быть установлены с помощью ulimits
команды.
Вы запускаете несколько программ, которые могут использовать большие объемы памяти. Некоторые вещи, которые вы можете посмотреть, включают в себя.
- Плохо запрограммированные приложения, работающие под,
apache2
могут вызвать утечку памяти. Вы должны увидеть увеличение объема памяти, когда это произойдет. Вы можете настроить apache2 для утилизации детей после определенного числа использований, установив MaxRequestsPerChild
значение 100 или около того. Если это решит проблему, то вам необходимо устранить утечку. Я бы посмотрел это в первую очередь.
- MySQL может попытаться загрузить данные в память. Если у вас много данных в памяти, это может вызвать некоторую порчу, но не должно быть таким драматичным, как вы видите.
- Если у вас установлена большая
tmpfs
файловая система, вы можете потерять память, если файлы не удаляются при использовании. Большие долгоживущие файлы также могут быть проблемой.
- Если проблема возникает примерно в одно и то же время суток, возможно, у вас есть запланированная программа, в которой происходит утечка памяти.
- Если у вас есть программа, которая выделяет общую память, но не освобождает ее перед выходом, у вас будет относительно невидимая утечка памяти. Если общая память заблокирована в памяти, это может привести к обмену. Объем доступной разделяемой памяти обычно относительно ограничен.
- У пакета liquidsoap + icecast могут возникнуть проблемы с буферизацией, использующие память. Я не использовал эту комбинацию, поэтому я не уверен, как это будет выглядеть.
Нормальное использование памяти: Свободная память - это не то, чего вы хотите. Если ваша система работала долгое время и имеет много свободной памяти, значит что-то не так. Каждый раз, когда вы читаете или пишете файл, блоки попадают в буферный кеш. Это уменьшит вашу свободную память, и это хорошо. В системе будет достаточно свободного места для запуска нескольких программ без поиска места в другом месте. Поскольку многие программы работают быстро, их память будет возвращена в свободный пул, когда они прекратят работу.
Когда вы читаете файл, который находится в буферном кеше, доступ к диску не требуется, и чтение разрешается из буферного кеша. Пишет использует похожий механизм. Если вашей системе нужна память, буферный кеш - это одно из первых мест, которое используется. Большинство буферов могут быть освобождены немедленно.
Если у вас утечка памяти, вы увидите свободную память, и буферы начнут сокращаться. Это все еще не является серьезной проблемой, поскольку утечка памяти должна в конечном итоге быть перемещена в пространство подкачки. Ваша система будет работать нормально до тех пор, пока вы не заполните пространство подкачки и не потратите оставшееся свободное пространство, чтобы программы не могли быть запущены. Типично, что может использоваться небольшое количество пространства подкачки.