Как ландшафт вычисляет использование памяти?

Я пытаюсь отладить ситуацию OOM на сервере Ubuntu 12.04, и, глядя на графики памяти в Landscape, я заметил, что не было никакого серьезного всплеска использования памяти. Затем я посмотрел на вывод команды free и не был уверен, как оба результата использования памяти связаны друг с другом.

Вот вывод ландшафта на сервере:

$ landscape-sysinfo 
  System load:  0.0               Processes:           93
  Usage of /:   5.6% of 19.48GB   Users logged in:     1
  Memory usage: 26%               IP address for eth0: -
  Swap usage:   2%

Затем я выполнил команду free, и я получил:

$ free -m
             total       used       free     shared    buffers     cached
Mem:           486        381        105          0          4        165
-/+ buffers/cache:        212        274
Swap:          255          7        248

Я могу понять 2% -ый своп использование, но откуда берется 26% использования памяти?

6
задан 29 November 2012 в 16:43

3 ответа

В среде

landscape-sysinfo на самом деле получает его данные непосредственно из /proc/meminfo:

dpb@helo:~$ cat /proc/meminfo |egrep 'MemTotal:|Active:'
MemTotal:       12286760 kB
Active:          3794832 kB
dpb@helo:~$

Вычисление "Использования памяти" в этом случае было бы:

((MemTotal - Active) / MemTotal) * 100

Вы видите эти вычисления в:

/usr/share/pyshared/landscape/sysinfo/memory.py
/usr/share/pyshared/landscape/lib/sysstats.py

получает его данные непосредственно из /proc/meminfo:

В свободном

free утилита также получает свои данные непосредственно из /proc/meminfo:

Мадам

  • общее количество: MemTotal
  • б/У: MemTotal - MemFree
  • свободный: MemFree
  • буферы: Buffers
  • кэшируемый: Cached

Буферы/кэш

  • б/У: MemTotal - MemFree - Buffers - Cached
  • свободный: MemFree + Buffers + Cached

Подкачка

  • общее количество: SwapTotal
  • б/У: SwapTotal - SwapFree
  • свободный: SwapFree

Общее количество

  • общее количество: MemTotal + SwapTotal
  • б/У: MemTotal - MemFree + SwapTotal - SwapFree
  • свободный: MemFree + SwapFree

Исправленный кэшируемый - lzap

8
ответ дан 29 November 2012 в 16:43

Для добавления к корректному ответу dpb мы должны определить различие между типами памяти. Движение документацией Redhat относительно/proc/meminfo:

Основные определения использованию:

  • Активная память является памятью, использовался недавно и не должен быть заменен ОС, когда новые страницы вводятся.
  • MemTotal - то, сколько применимой памяти Ваша система имеет (физическая память минус крошечный объем памяти, используемый для кода ядра).
  • MemFree является памятью в настоящее время неиспользованная память. Память, используемая в качестве дискового кэша, не свободна.
  • MemUsed является памятью, используемой = MemTotal - MemFree.
  • Кэшируемый память, используемая в качестве кэша для файлов на диске - если Вы недавно считаете файл из диска, возможно, то Вы посмотрите на него снова в ближайшем будущем так, давайте сохраним его в памяти, когда его доступные (как чрезвычайно свободный и мог существенно ускорить Ваш компьютер как чтения от диска, берут несколько миллисекунд, в то время как чтения из памяти занимают микросекунды или меньше).
  • Буферы являются буфером для расположенных устройств IO - например, при изменении значений файла он сначала сохраняется к буферам (в оперативной памяти), и затем изменения записаны в диск, поскольку пишущий в диск является медленным. Эта буферизированная память является недолгой и крошечной на современных ядрах. (Предоставленный различие между кэшировал/буферизовал, менее ясно на современном ядре Linux, см. [1]).
  • MemUsed - Буферизует/Кэширует (первое число во второй строке свободных) то, сколько памяти используется Вашими процессами. Это - то, сколько памяти используется, игнорируя дисковый кэш (который Ваша система свободна по записи)..

У Вас могла легко быть более активная память, чем MemUsed - Буферизует/Кэширует. Этот сценарий произошел бы при частом доступе к частям диска, которые кэшировались в памяти. Точно так же у Вас могли быть процессы, которые выделили память, но не использовали, который недавно выделил память - возможно, ее идеал для перемещения этой выделенной памяти, чтобы подкачать, если Вам нужно больше памяти.

0
ответ дан 29 November 2012 в 16:43

Эти графики отражают не каждое событие выделения / освобождения памяти, а выборки из /proc/meminfo (точно так же, как описано dpb ) с заданными интервалами. Слегка спекулятивное объяснение того, почему это не показано на графике, состоит в том, что это просто произошло между точками, когда выборка памяти использовалась.

Я подозреваю, что здесь произошло то, что какой-то процесс спешно приобрел много памяти, и убийца ООМ избавился от нее до того, как можно было сделать образец. Это будет довольно экстремальное обстоятельство, а также то, что будет означать, что вся машина работает медленно, так как она сильно менялась. Эта загрузка на машине уменьшит вероятность того, что у системы будет достаточно времени для выборки использования памяти во время этого окна и отправки отчета обратно на сервер ландшафта.

0
ответ дан 29 November 2012 в 16:43

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

Похожие вопросы: