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

210

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

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

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

    
задан Jonas 26.10.2010 в 16:50
источник

10 ответов

253

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

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 + C .

    
ответ дан Justin Force 26.10.2010 в 17:40
источник
181

Я думаю, что htop - лучшее решение.

  • sudo apt-get install htop

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

    
ответ дан Alvar 18.05.2012 в 00:11
37

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

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

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

[email protected]:~$ 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. У меня еще не было возможности узнать, почему именно так.

    
ответ дан Jason Mock 01.10.2015 в 23:47
21

Используйте бесплатную команду. Например, это значение 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
    
ответ дан Isaiah 26.10.2010 в 17:19
9

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

ответ дан mgunes 26.10.2010 в 17:27
4

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

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

    
ответ дан bafromca 19.01.2015 в 20:09
3

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

free -m | grep "Mem:"

Вот пример ожидаемого вывода:

    

ответ дан Tim 27.09.2016 в 13:30
2

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

    

ответ дан Amir 16.04.2016 в 19:15
1

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

    
ответ дан Matt 26.10.2010 в 18:01
0

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

Я больше согласен с одним из предыдущих сообщений, в котором упоминается как 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
    
ответ дан SimplisticSpeed 22.10.2016 в 15:32