У меня есть относительно небольшой домашний сервер Red Hat Linux (около 8 ГБ ОЗУ). Я не использую его для чего-то другого, кроме запуска некоторых домашних приложений, чтобы отслеживать различные вещи. Единственное, что работает на коробке, - это база данных и веб-сервер.
Я заметил, что при проверке системных счетчиков с помощью таких инструментов, как NMON и TOP, общая свободная память системы относительно мала (порядка нескольких сотен МБ), в то время как активная память для базы данных и веб-сервера все еще остается низкой (только потребляет в совокупности 3 ГБ). Даже с учетом всех остальных запущенных процессов общий объем потребляемой памяти составляет менее 4 ГБ.
Почему Red Hat Linux сообщает меньше свободной памяти, чем общая память за вычетом общей суммы используемой памяти запущенных процессов?
Не путайте свободную память с неиспользуемой. Свободная память в мире unix - это страница физической памяти, на которую не отображаются логические данные. Неиспользуемая память имеет сопоставленные данные, но в настоящее время ее нет в активный использование запущенным процессом.
% free -m
total used free shared buffers cached
Mem: 997 942 55 0 71 366
-/+ buffers/cache: 504 492
Swap: 2015 618 1397
Linux (и все ОС Unix) стараются иметь как можно меньше свободной памяти. Вместо этого они используют память, которая не отображается активно для процессов в работающей ОС, для таких вещей, как файловый кеш и буферы для различных операций передачи ввода-вывода.
Еще кое-что, что может вас сбить с толку, - это то, что вы не можете просто добавить память, используемую всеми запущенными процессами, чтобы получить общий объем используемой памяти. Если вы попытаетесь это сделать, вы быстро обнаружите, что ваши приложения, похоже, используют больше памяти, чем есть на самом деле на машине. Это по двум причинам
Есть недавняя статья о lwn.net обсуждает этот вопрос.
Linux будет активно кэшировать доступ к файловой системе в память, чтобы сократить время доступа к диску. Не о чем беспокоиться.
Выполнение команды free -m на поле даст вам лучшее представление о том, где используется память.
Ниже приведен результат, полученный из одного из моих ящиков. Свободная память составляет 147Meg с почти 4G кэшированием для запросов доступа к файловой системе.
free -m
total used free shared buffers cached
Mem: 6035 5888 147 0 77 4116
-/+ buffers/cache: 1693 4341
Swap: 4722 0 4722
В linux посмотрите Committed_AS в / proc / meminfo, это объем памяти (реальный + своп), который ядро фактически обещало запущенным процессам.
Linux очень эффективно использует память, любые блоки не Обещанный некоторый процесс используется для кеширования недавно / часто используемых файлов. Итак, для Linux типично использовать 90% всей доступной физической памяти вскоре после загрузки.
Посмотрите, что ядро обязалось предоставить ... и грязное использование (свопинг), это даст вам лучшую общую картину.
Если вам нужно изменить это поведение, обновите свой вопрос :)
Это стандартный MO для Linux ... некоторые дистрибутивы настраивают управление памятью в соответствии со своими потребностями через sysctl. Однако то, что вы сообщаете, довольно типично среди всех.
Вы также включаете поля «буферизованный» и «кешированный»?
Какое ядро вы используете в системе? 32-разрядное ядро сообщает только около 3,6 ГБ памяти, если оно не скомпилировано с включенным PAE.
При этом, если это современная версия Redhat Enterprise Linux (или CentOS) - начиная с v3 - 32-разрядное ядро по умолчанию будет включать эту функцию.
Если вы могли бы опубликовать вывод команды «бесплатно», описанный выше, мы сможем увидеть, является ли это проблемой.