Почему 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.

Другие вопросы по тегам