После исследования все еще запутался в мониторинге использования ОЗУ

10

Я просмотрел эту статью , в которой объясняются различные методы проверки использования вашей оперативной памяти. Однако я не могу примирить разные методы и не знаю, какой из них правильный.

При первом входе в систему меня приветствует экран, подобный следующему:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Это говорит мне о том, что я использую 41% своей оперативной памяти, что кажется довольно высоким, поскольку сервер мало что делает. Или это число относится к чему-то кроме ОЗУ?

Далее я попробую free -mметод:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Согласно пояснительной иллюстрации в статье это означает, что у меня 130 МБ используемой оперативной памяти и 459 МБ свободной оперативной памяти, что говорит о том, что я использую около 22% своей оперативной памяти.

Далее я бегу top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Это наиболее запутанно, поскольку в сводке показано, что я использую 525MG из 604M общего количества, и все же, когда используется интерактивная команда «m» для сортировки по верхнему объему памяти, верхний процесс использует только 0,3% памяти ???

Наконец, psкоманда, похоже, также показывает очень мало использования памяти:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Я хотел бы, чтобы кто-то исправил все мои недоразумения, которые создают эти очевидные конфликты.

Спасибо!

РЕДАКТИРОВАТЬ для Rahul

Выход из cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Ион
источник
# 1) Команда в верхних сортировки по памяти не м , это М . # 2) Чтобы увидеть все процессы, попробуйте команду ** ps ax -o, rss **; то, что вы пробежали, просто показывает ваши собственные.
Тинк
Пожалуйста, также обновите нам выводcat /proc/meminfo
Рахул Патил
5
linuxatemyram.com
Майкл Хэмптон
@tink, спасибо за это объяснение. Я попробовал ps ax -o rss | awk '{ sum+=$1} END {print sum}'только сейчас и 153156.
Иона
@RahulPatil, OP обновлен. Обратите внимание, что запущенные процессы могут немного отличаться от исходных чисел, но не должны быть такими уж далекими. Кроме того, результат, который я получил для вас, кажется, не совпадает с результатом, который я получил для комментария выше в этом комментарии. Те были взяты всего через пару минут.
Иона

Ответы:

8

Вам просто нужно понять концепцию памяти

Согласно вашему выводу / proc / meminfo, вам просто нужно заметить следующее:

Буферы : - Буфер - это то, что еще не «записано» на диск. Он показывает, сколько ОЗУ выделено для блока кеша. «Cached» похож на «Buffers», только на этот раз он кэширует страницы из файла чтения

Кэширование : - Кэш - это то, что было «прочитано» с диска и сохранено для последующего использования. Как правило, область кэша можно рассматривать как еще одну «свободную» оперативную память, поскольку она будет постепенно сокращаться, если приложению требуется больше памяти.

Достаточно понять, что и «буферы», и «кэшированные» представляют размер системного кэша. Они динамически растут или уменьшаются в соответствии с внутренним механизмом ядра Linux.

на веб-хостинге они очищают кеш с помощью нижеприведенного cmd: (в основном настроено в cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Цитировать Ссылка

РЕДАКТИРОВАТЬ для еще одного требования, т.е. для использования памяти пользователя

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Пожалуйста, проверьте с помощью приведенного выше сценария и дайте мне знать, если он показывает правильно или нет.

Рахул Патил
источник
Спасибо, Рахул. Последний вопрос Так free -mкак не обеспечивает способ просмотра памяти, используемой на пользователя, каков точный способ определить, сколько реального ОЗУ потребляется конкретным пользователем? Это происходит, например, при мониторинге использования собственной памяти на общем сервере.
Иона
@ Иона, я обновил .. пожалуйста, проверьте и дайте мне знать
Рахул Патил
этот сценарий не работает, как ожидалось ... но я пытаюсь скоро
обновится
@Jonah спасибо за то, что приняли мой ответ ... но реальное спасибо за MichaelHampton ...
Рахул Патил
2

Хороший ответ @RahulPatil.

Еще один момент, который нужно учитывать в отношении ps или top:

Этот инструмент [exmap] более точен, чем ps или top, потому что он учитывает общие библиотеки, используемые несколькими приложениями. Например, если два приложения используют одну и ту же общую библиотеку, которая занимает 1 МБ памяти, ps покажет оба приложения, использующие 1 МБ дополнительной памяти, тогда как exmap более корректно показывает каждое приложение, используя 500 КБ. Эта большая точность особенно важна для оценки окружений рабочего стола, таких как KDE и GNOME, которые очень интенсивно используют библиотеки, совместно используемые приложениями.

Через ibm / developerworks / linux_memory

Так как ваш вопрос относится к безголовому серверу - я не уверен, сколько на самом деле будет иметь двойной отчет top или ps.

Yeow_Meng
источник
0

Я боюсь, что мы можем упускать из виду очевидное, потому что это «конечно» для большинства из нас.

Джона, прости меня, если я ошибаюсь, но твои вопросы звучат так, как будто ты не понял, что все эти значения, в частности использование ЦП, обычно меняются от секунды к секунде.

Загрузка ЦП может мгновенно перейти от однозначных цифр к 100% по мере запуска нового процесса, но быстро (надеюсь) упадет до диапазона ниже 50%.

Использование памяти меняется медленнее, но там Linux пытается использовать неактивную память, запуская процессы для «кэширования» обращений к диску. Например, он пытается предсказать, что нужно будет прочитать с диска дальше, например, возможно, оставшуюся часть большого файла после прочтения части, и предварительно загрузить его в кэш. Некоторые из значений использования памяти включают как память, используемую процессами, так и память, используемую для кэширования. В системе, которая работала некоторое время, эти две комбинации, вероятно, составят 80-90% или более.

Также учтите, что процесс, который вы запускаете, чтобы показать использование, например top, использует процессор и память, а также. Если вы написали сценарий с циклом для непрерывного отчета об использовании ЦП, он почти наверняка всегда будет показывать 100%, потому что сам отчет об использовании (без каких-либо sleep задержек) использует весь ЦП.

DocSalvager
источник
Док, спасибо за мысль, но это не было проблемой
Иона