Вопрос: Как я могу контролировать использование памяти?


я использовал top чтобы увидеть использование памяти в данный момент. Но я хотел бы отслеживать использование памяти в течение определенного периода времени. Например, начните мониторинг, а затем выполните несколько команд и окончательно остановите мониторинг и посмотрите, сколько памяти было использовано в течение периода.

Как я могу это сделать на сервере Ubuntu?

Думаю, я мог бы начать cronjob каждые 5 секунд или около того и вызвать команду, которая регистрирует текущее использование памяти в текстовом файле. Но какую команду следует использовать для получения текущего использования памяти в формате, который легко записывается в текстовый файл?


231
2017-10-26 16:50


Источник




Ответы:


Я рекомендую комбинировать предыдущие ответы

watch -n 5 free -m

Обратите внимание, что Linux любит использовать любую дополнительную память для кеш-блоки жесткого диска, Поэтому вы не хотите смотреть на Mem, Вы хотите посмотреть на free столбец -/+ buffers/cache: ряд. Это показывает, сколько памяти доступно для приложений. Так что я просто побежал free -m и получил это:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

Я знаю, что использую 1528 МБ и имеют 2170 МБ свободно.

Заметка: Чтобы остановить это watch цикла, вы можете просто нажать Ctrl+С,


284
2017-10-26 17:40



Спасибо, это информативно. Но на используемой колонке вы сначала 2896 а потом 1528 для буферов, не означает ли это, что вы используете 2896 + 1528? - Jonas
Mem: used ваша общая используемая память. -/+ buffers/cache: used ваша общая используемая память минус буферов и кеша. Я знаю, что результат выглядит забавным, но здесь нет арифметики. Вы просто ищете использовать / бесплатно в строке - / + buffers / cache. - Justin Force
Опция -h намного приятнее - frmdstryr
@frmdstryr Хорошая мысль! -h / - человек не существовал, когда я писал это. gitlab.com/procps-ng/procps/commit/... - Justin Force
@ cbradsh1 Вы можете просто сделать free -h, например. watch -n 5 free -h для получения «удобочитаемого» результата, например. 2.1G вместо 2170 на выходе. - Justin Force


я думаю htop является лучшим решением.

  • sudo apt-get install htop

Таким образом вы заметите, какие программы используют большинство ОЗУ. и вы можете легко закончить один, если хотите. Вот скриншот!


191
2018-05-18 00:11



htop хорошо, потому что он более «графический» и, возможно, легче читать, чем free, - mjswensen
я не понимаю выход. Является RES память, используемая этим приложением в MB? То, что SHR? - faizal
@faizal: виртуальная, зарезервированная и разделяемая память. - WitchCraft
как htop показать вам «использование памяти в течение определенного периода времени»? - dangel


Если вы ищете хорошую разбивку памяти, используемую каждым запущенным процессом, я бы рекомендовал проверить ps_mem.py (найденный Вот на pixelbeat.org).

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

Пример вывода:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

Единственная часть, которая мне не нравится, это тот факт, что сценарий утверждает, что требует прав root. У меня еще не было возможности увидеть, почему именно так.


38
2017-10-26 17:19



Интересно, разделяется ли память между потоками. Он разделен между процессами, не так ли? По крайней мере, в Windows ... - Thomas Weller
Таким образом, в этом случае общая память относится к страницам, которые отображаются несколькими процессами в виде разделяемых библиотек. Кроме того, в контексте многопоточных приложений все пространство памяти процесса доступно для всех потоков в этом процессе. - Jason Mock
Теперь доступно в PyPI (pip install ps_mem) а также на GitHub, - Leif Arne Storset
@ThomasWeller: Да, потоки всегда обмениваются памятью, тогда как процессы могут разделять некоторые или все из них при определенных условиях. - Leif Arne Storset
для этого я использую gnome-system-monitor - jms


Использовать свободно команда. Например, это free -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ вернет только вторую строку:

-/+ buffers/cache:        947       1064

21
2017-10-26 17:27



Спасибо, отлично выглядит. Итак, это 947 использование памяти минус память, используемая для буферов и кешей? - Jonas


смотреть команда может быть полезна. Пытаться watch -n 5 free для мониторинга использования памяти с обновлениями каждые пять секунд.


9
2018-01-19 20:09



Спасибо, это было здорово! Тем не менее, я предпочел бы использовать память в одной строке, поэтому легко войти в текстовый файл. - Jonas


Для визуального мониторинга общего использования ОЗУ, если вы используете бёбу, он сохранит использование вашей памяти в нижнем правом углу терминала и будет работать, пока вы находитесь в любом сеансе терминала.

Как видно из снимка экрана, моя виртуальная машина имеет 1h3m uptime, 0.00 load, имеет 2,8 ГГц (виртуальный) процессор и 994MB (21%) оперативной памяти, доступных в системе.

Byobu in use


4
2018-04-16 19:15





Вы можете сделать это, используя cat /proc/meminfo,

enter image description here


3
2017-09-27 13:30



добавление часов к передней части этой команды делает его замечательным! как в watch cat /proc/meminfo - Elder Geek
free команда берет свою информацию из /proc/meminfo и представляет их в компактном виде. использование free -h для чтения человеком. - LoMaPh


Однолинейное решение и выход:

free -m | grep "Mem:"

Ниже приведен пример ожидаемого результата:

enter image description here


3
2017-10-26 18:01



Это также позволит вам увидеть использование памяти на данный момент ... - mook765


я хотел бы использовать Кактусы, Это позволит графически отображать использование памяти и т. Д. В течение определенного периода времени, и вы сможете проверить использование с помощью своего веб-браузера.


1
2017-10-22 15:32





Мониторинг использования памяти

Я больше согласен с одним из предыдущих сообщений, в котором упоминается как Cacti как отличный способ контролировать использование памяти. Однако, поскольку кажется, что кактусы больше не популярны в мейнстриме, есть альтернативное графическое приложение Graphite.

Графит относительно прост в установке на сервере ubuntu и для его установки можно проверить эту ссылку для простых процедур установки.

После того, как графит был установлен, теперь вы можете отправлять ему метрики памяти, в зависимости от того, какой вы хотите; каждые 5 секунд, каждую минуту, каждый час ... и т. д.

Чтобы графические показатели памяти, как уже было предложено в предыдущих сообщениях, вы можете написать собственный скрипт с помощью системных инструментов для сбора необходимой информации о памяти. Или вы можете использовать prewritten snmp-плагин, который сделает всю работу за вас.

Если вы хотите написать собственный сценарий памяти, будет разумным обеспечить учетную запись буферизованной и кэшированной памяти при расчете используемой памяти, иначе вы получите сбор ложных данных.

Если вы хотите вместо этого использовать плагин snmp, который уже выполняет все необходимые вычисления для вас, вот ссылка на хорошо работающую: checkMemoryviaSNMP,

Плюсы SNMP:

У меня есть snmp, установленный на всех удаленных узлах, которые я контролирую. Это позволяет мне контролировать все мои системы из один центральный сервер (ы), без необходимости копировать или размещать плагин на удаленных узлах.

Минусы SNMP:

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

Конфигурация агента SNMP на удаленном узле (узлах):

После того, как агент snmp был установлен, просто vi файл /etc/snmpd/snmpd.conf и добавьте в него эту строку:

rocommunity  (specify-a-community-string-aka-password-here)

Затем перезапустите агент snmpd, используя:

/etc/init.d/snmpd restart

Затем, на вашем центральном сервере, из которого вы вместо этого будете контролировать все ваши другие серверы, вы можете запустить следующую команду:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s

1