У меня есть сервер, на котором работает пакет liquidsoap + icecast и простой веб-сайт (httpd + mysqld). Ничего особенного. Посетители около 2000+ в день, в среднем около 50 человек одновременно находятся в сети.
Сервер имеет 8 ГБ оперативной памяти. С течением времени объем свободной памяти постоянно уменьшается, хотя на сервере не запускается ничего нового и новых пользователей нет. В какой-то момент он начинает меняться, нагрузка на сервер увеличивается, и он перестает отвечать на запросы. Обычно я просто перезагружаю сервер ...
Что можно сделать, чтобы обнаружить, что именно утечки памяти? Я использую top для мониторинга использования ресурсов, но, насколько я вижу, он не показывает ничего полезного:
Есть ли способ узнать, что использует столько памяти? или что начинает сильно переставлять на диск? Любой способ освободить память без перезагрузки сервера?
источник
Ответы:
Запуск
top
в пакетном режиме для периодического отчета о размерах памяти может быть использован, чтобы увидеть, кто использует память, когда дела идут на юг. Запускsar
в пакетном режиме должен дать хорошую диагностику использования памяти и связанных с ними операций ввода-вывода. Запускmunin
для мониторинга системы должен дать вам график с хорошей детализацией того, для чего используется память. Это может очень помочь.Вы можете использовать limit.conf, чтобы ограничить максимальный размер ядра программ. Правильно настроенный, это должно убить все программы, которые имеют утечку памяти. Это работает с модулем pam_limits. Пределы также могут быть установлены с помощью
ulimits
команды.Вы запускаете несколько программ, которые могут использовать большие объемы памяти. Некоторые вещи, которые вы можете посмотреть, включают в себя.
apache2
могут вызвать утечку памяти. Вы должны увидеть увеличение объема памяти, когда это произойдет. Вы можете настроить apache2 для утилизации детей после определенного числа использований, установивMaxRequestsPerChild
значение 100 или около того. Если это решит проблему, то вам необходимо устранить утечку. Я бы посмотрел это в первую очередь.tmpfs
файловая система, вы можете потерять память, если файлы не удаляются при использовании. Большие долгоживущие файлы также могут быть проблемой.Нормальное использование памяти: Свободная память - это не то, чего вы хотите. Если ваша система работала долгое время и имеет много свободной памяти, значит что-то не так. Каждый раз, когда вы читаете или пишете файл, блоки попадают в буферный кеш. Это уменьшит вашу свободную память, и это хорошо. В системе будет достаточно свободного места для запуска нескольких программ без поиска места в другом месте. Поскольку многие программы работают быстро, их память будет возвращена в свободный пул, когда они прекратят работу.
Когда вы читаете файл, который находится в буферном кеше, доступ к диску не требуется, и чтение разрешается из буферного кеша. Пишет использует похожий механизм. Если вашей системе нужна память, буферный кеш - это одно из первых мест, которое используется. Большинство буферов могут быть освобождены немедленно.
Если у вас утечка памяти, вы увидите свободную память, и буферы начнут сокращаться. Это все еще не является серьезной проблемой, поскольку утечка памяти должна в конечном итоге быть перемещена в пространство подкачки. Ваша система будет работать нормально до тех пор, пока вы не заполните пространство подкачки и не потратите оставшееся свободное пространство, чтобы программы не могли быть запущены. Типично, что может использоваться небольшое количество пространства подкачки.
источник
sar
поможет определить, какой раздел имеет ввод / вывод, и может помочь обнаружить проблему.Вы можете использовать эту команду для просмотра 10 лучших приложений, касающихся использования оперативной памяти:
Иногда эта команда помогает вам, если было создано много подпроцессов:
Таким образом, вы можете увидеть, какие процессы принадлежат друг другу.
источник
ps
илиtop
выходе - это то, на что нужно обратить внимание при попытке обнаружить утечку памяти: разве это не только процент физической памяти, используемой процессом в настоящее время? Но другие части используемой (включая утечку) памяти процесса могут быть выгружены. Возможно, «размер» или «vsize» будет более подходящим для измерения размера процесса? Например,ps -A --sort -size -o comm,size | head -n 11
илиps -A --sort -vsize -o comm,vsize | head -n 11
Ничто не использует эту память с точки зрения приложений.
Вам нужно вычесть «кэшированное» значение, которое представляет кеш страницы, чтобы получить лучшее представление о том, каково ваше фактическое использование памяти с точки зрения использования программы.
В основном это хорошее управление памятью, и это в идеале то, что вы хотите.
Смотрите ссылку здесь для получения дополнительной информации: http://www.linuxatemyram.com/
источник
Я не профессионал в этом деле, но жидкое мыло + icecast связано с мультимедиа. Когда система свободна, она кэшируется и / или занимает память для будущего использования. И если трафик увеличивается в определенное время дня / в течение определенного периода времени, то он начнет обмениваться. На этом этапе, если количество запросов (пользователей, просматривающих контент) увеличивается, то необходимые ресурсы будут более 8 ГБ ОЗУ.
источник