Почему top указывает на низкое использование памяти, а free указывает на высокое использование памяти?
Почему top указывает на низкое использование памяти, а free указывает на высокое использование памяти?
Mem: 262144k total, 225708k used, 36436k free, 47948k buffers
Swap: 262136k total, 40k used, 262096k free, 110704k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1652 root 15 0 79456 14m 1728 S 0.0 5.6 0:00.02 miniserv.pl
3544 root 15 0 87920 3356 2584 R 0.0 1.3 0:00.01 sshd
3707 root 16 0 86704 3104 2416 S 0.0 1.2 0:00.00 sshd
3708 sshd 15 0 61864 1452 872 S 0.0 0.6 0:00.00 sshd
3548 root 16 0 10872 1432 1116 S 0.0 0.5 0:00.00 bash
1908 root 15 0 10876 1392 1072 S 0.0 0.5 0:00.00 sh
918 root 15 0 60520 1204 664 S 0.0 0.5 0:00.07 sshd
3624 root 15 0 12584 1180 920 R 0.0 0.5 0:00.00 top
926 root 18 0 19672 1152 576 S 0.0 0.4 0:00.00 crond
1 root 15 0 10324 704 588 S 0.0 0.3 0:00.02 init
311 root 16 -4 12580 704 388 S 0.0 0.3 0:00.06 udevd
874 root 16 0 5884 592 472 S 0.0 0.2 0:00.06 syslogd
877 root 18 0 3780 420 336 S 0.0 0.2 0:00.00 klogd
Общее использование MEM = 12,1%
Тем не менее, 226 МБ используется из 262 МБ, из них 36 МБ - т.е. 86,25%.
Даже принимая во внимание обмен, общий объем памяти 262 МБ *2 = 524 МБ. Учитывая, что используется 226 МБ, используется 43,12%. И то, и другое намного выше, чем фактическая обработка, перечисленная сверху.
Сервер представляет собой новый 256-мегабайтный VPS-сервер под управлением CentOS 5.2 - на нем еще ничего не установлено. Запуск вебадмина; т.е. нет плеска.
Этот вопрос в основном о противоречивой информации, которая, кажется, дается сверху; но мне также интересно, нормально ли используется эта память для сервера, на котором не запущены какие-либо приложения, интенсивно использующие память. Я намерен установить Apache/Ruby EE/Passenger; однако, если использование памяти уже настолько высоко, я не уверен, насколько хорошо он справится с этим.
3 ответа
Топ, это фигура в %MEM
столбец, подсчитывает сумму RSS
объем памяти (резидентный размер сегмента, в основном страницы физической памяти, на которых есть реальные данные) в процентах от общей физической памяти вашей машины или VPS.
С другой стороны, free подсчитывает только количество страниц физической памяти, на которых нет данных и которые не были назначены буферам, кешу или ядру. В Unix-подобных операционных системах ОС старается сохранить это число как можно ниже, используя свободные страницы для дискового кэша. Единственный раз, когда вы, вероятно, будете использовать высокое значение свободной памяти, это сразу после загрузки вашей машины или если вы выйдете из программы, которая потребляла большой объем физической памяти.
Это использование памяти нормально? Короткий ответ: да. Для программ Unix характерно выделять (то есть запрашивать у ОС) значительно больше памяти, чем они использовали бы. Если вы посмотрите на VSS
столбец, для перечисленных процессов общее количество составляет более 463 МБ. Это потому
- Большая часть памяти, учитываемая для каждого процесса, будет физически сопоставлена с одной и той же библиотекой, скажем
glibc
- Операционная система обычно выделяет память приложению на том основании, что большинство приложений никогда не собирают то, о чем они просили.
Выяснить, использование памяти процесса - это больше искусство, чем наука. ИМХО, смотрите обсуждение на http://lwn.net/. Мой совет - внимательно следить за iostat -xm
и убедитесь, что ваша машина не сильно менялась.
В дополнение к ответу Дейва Чейни:
Общее использование памяти минус буферы и кэш (159M) составляет ~67M и 67/524M ~12%. Поскольку для запуска процессов требуется больше памяти, система автоматически очистит старый кэш и выделит его.
Если вы запустите бесплатно, вы получите представление о том, сколько памяти фактически используется при запуске процессов и что на самом деле доступно.
$ free -m
total used free shared buffers cached
Mem: 247 218 29 0 46 96
-/+ buffers/cache: 74 172
Swap: 556 0 556
Интересующая вас строка - это / /+ buffers/cache
Вы, вероятно, обнаружите, что это не все процессы, которые выполняются на вашем компьютере - только 13 лучших, отсортированных по использованию памяти.
Если вы запустите "ps", вы увидите все запущенные процессы, которые при стандартной установке Ubuntu равны 109.