Я пытаюсь отладить ситуацию 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% использования памяти?
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
Для добавления к корректному ответу dpb мы должны определить различие между типами памяти. Движение документацией Redhat относительно/proc/meminfo:
Основные определения использованию:
У Вас могла легко быть более активная память, чем MemUsed - Буферизует/Кэширует. Этот сценарий произошел бы при частом доступе к частям диска, которые кэшировались в памяти. Точно так же у Вас могли быть процессы, которые выделили память, но не использовали, который недавно выделил память - возможно, ее идеал для перемещения этой выделенной памяти, чтобы подкачать, если Вам нужно больше памяти.
Эти графики отражают не каждое событие выделения / освобождения памяти, а выборки из /proc/meminfo
(точно так же, как описано dpb ) с заданными интервалами. Слегка спекулятивное объяснение того, почему это не показано на графике, состоит в том, что это просто произошло между точками, когда выборка памяти использовалась.
Я подозреваю, что здесь произошло то, что какой-то процесс спешно приобрел много памяти, и убийца ООМ избавился от нее до того, как можно было сделать образец. Это будет довольно экстремальное обстоятельство, а также то, что будет означать, что вся машина работает медленно, так как она сильно менялась. Эта загрузка на машине уменьшит вероятность того, что у системы будет достаточно времени для выборки использования памяти во время этого окна и отправки отчета обратно на сервер ландшафта.