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

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

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

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

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

watch -n 5 free -m

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

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

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

Примечание: Чтобы остановить это watch цикл вы можете просто нажать Ctrl+C.

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

  • sudo apt-get install htop

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

Если вы ищете хорошую разбивку памяти, используемой каждым запущенным процессом, то я мог бы порекомендовать проверить 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       cron120.0 KiB +  50.0 KiB = 170.0 KiB       master204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd384.0 KiB + 171.0 KiB = 555.0 KiB       sudo476.0 KiB +  83.0 KiB = 559.0 KiB       monit568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam552.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-server888.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       mysqld147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)---------------------------------                        208.1 MiB================================= Private  +   Shared  =  RAM used       Program

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

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

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

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

-/+ buffers/cache:        947       1064

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

Вы можете сделать это с помощью cat /proc/meminfo.

MemTotal:        4039160 kBMemFree:          309796 kBMemAvailable:    3001052 kBBuffers:          345636 kBCached:          2341288 kBSwapCached:            8 kBActive:          1725160 kBInactive:        1551652 kBActive(anon):     538404 kBInactive(anon):    70076 kBActive(file):    1186756 kBInactive(file):  1481576 kBUnevictable:          32 kBMlocked:              32 kBSwapTotal:       4194300 kBSwapFree:        4194044 kBDirty:                 0 kBWriteback:             0 kBAnonPages:        589988 kBMapped:           255972 kBShmem:             18596 kBSlab:             374888 kBSReclaimable:     310496 kBSUnreclaim:        64392 kBKernelStack:        6976 kBPageTables:        26452 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:     6213880 kBCommitted_AS:    3589736 kBVmallocTotal:   34359738367 kBVmallocUsed:           0 kBVmallocChunk:          0 kBHardwareCorrupted:     0 kBAnonHugePages:         0 kBShmemHugePages:        0 kBShmemPmdMapped:        0 kBCmaTotal:              0 kBCmaFree:               0 kBHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:      147392 kBDirectMap2M:     4046848 kB

Я только что нашел это решение, и оно работает очень хорошо, создавая графический интерфейс через CLI:

# fixed linkgit clone https://github.com/aristocratos/bashtopcd bashtopbash bashtop

Screenshot

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

Как вы можете видеть на скриншоте, моя виртуальная машина имеет время безотказной работы 1ч3м, загрузку 0,00, имеет 2,8 ГГц (виртуальный) процессор и 994 МБ (21%) оперативной памяти, доступной в системе.

Byobu in use

Однострочное решение и выход:

free -m | grep "Mem:"

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

Mem:           3944         652         302          18        2990        2930

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

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

Graphite относительно легко установить на сервер ubuntu, и для его установки вы можете ознакомьтесь с этой ссылкой для удобства выполнения процедур установки.

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

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

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

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

Плюсы SNMP:

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

Минусы SNMP:

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

Настройка SNMP-агента на удаленном узле (узлах):

После установки snmp-агента просто откройте файл /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,typicalWARNING: 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.23suser    0m0.03ssys     0m0.02s