Как я могу контролировать использование памяти?
Я использовал top
чтобы увидеть использование памяти на данный момент. Но я хотел бы контролировать использование памяти в течение определенного периода времени. Например, запустите мониторинг, затем выполните несколько команд и, наконец, остановите мониторинг и посмотрите, сколько памяти было использовано за период.
Как я могу сделать это на Ubuntu Server?
Я думаю, я мог бы запускать cronjob каждые 5 секунд или около того, и вызывать команду, которая записывает текущее использование памяти в текстовый файл. Но какую команду я должен использовать, чтобы получить текущее использование памяти в формате, который легко записать в текстовый файл?
13 ответов
Я рекомендую объединить предыдущие ответы
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.
Я думаю 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 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. У меня еще не было возможности точно понять, почему это так.
Используйте бесплатную команду. Например, это выход 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
Вы можете сделать это с помощью cat /proc/meminfo
,
MemTotal: 4039160 kB
MemFree: 309796 kB
MemAvailable: 3001052 kB
Buffers: 345636 kB
Cached: 2341288 kB
SwapCached: 8 kB
Active: 1725160 kB
Inactive: 1551652 kB
Active(anon): 538404 kB
Inactive(anon): 70076 kB
Active(file): 1186756 kB
Inactive(file): 1481576 kB
Unevictable: 32 kB
Mlocked: 32 kB
SwapTotal: 4194300 kB
SwapFree: 4194044 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 589988 kB
Mapped: 255972 kB
Shmem: 18596 kB
Slab: 374888 kB
SReclaimable: 310496 kB
SUnreclaim: 64392 kB
KernelStack: 6976 kB
PageTables: 26452 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6213880 kB
Committed_AS: 3589736 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 147392 kB
DirectMap2M: 4046848 kB
Команда watch может быть полезна. Пытаться watch -n 5 free
контролировать использование памяти с обновлениями каждые пять секунд.
Я только что нашел это решение, и оно работает очень хорошо, создавая графический интерфейс через CLI:
# fixed link
git clone https://github.com/aristocratos/bashtop
cd bashtop
bash bashtop
Однолинейное решение и вывод:
free -m | grep "Mem:"
Вот пример ожидаемого результата:
Mem: 3944 652 302 18 2990 2930
Для визуального мониторинга общего использования оперативной памяти, если вы используете Byobu, он будет хранить ваше использование памяти в правом нижнем углу терминала и будет работать, пока вы находитесь в любом терминальном сеансе.
Как вы можете видеть на скриншоте, моя виртуальная машина имеет время бесперебойной работы 1 час 3 м, нагрузку 0,00, 2,8 ГГц (виртуальный) процессор и 994 МБ (21%) оперативной памяти, доступной в системе.
Я бы использовал Кактусы. Это будет отображать график использования памяти и т. Д. За определенный период времени, и вы сможете проверить использование с помощью веб-браузера.
Мониторинг использования памяти
Я больше согласен с одним из предыдущих постов, в которых упоминалась Cacti как отличный способ контролировать использование памяти. Однако, поскольку кажется, что кактусы больше не популярны в мейнстриме, есть альтернативное графическое приложение под названием Graphite.
Graphite относительно прост в установке на сервер Ubuntu, и для его установки вы можете воспользоваться этой ссылкой для простых процедур установки.
После того, как графит был установлен, теперь вы можете отправлять ему метрики памяти с любым интервалом, который пожелаете; каждые 5 секунд, каждую минуту, каждый час... и т. д.
Чтобы построить график метрик памяти, как уже предлагалось в предыдущих статьях, вы можете написать свой собственный скрипт, используя системные инструменты для сбора необходимой информации о памяти. Или вы можете использовать заранее написанный плагин snmp, который сделает всю работу за вас.
Если вы хотите написать свой собственный скрипт памяти, будет разумно убедиться, что вы учитываете буферизованную и кэшированную память при расчете используемой памяти, в противном случае вы в конечном итоге соберете ложные данные.
Если вы хотите вместо этого использовать плагин snmp, который уже выполняет все необходимые вычисления, вот ссылка на тот, который работает довольно хорошо: checkMemoryviaSNMP.
Плюсы SNMP:
У меня установлен snmp на всех удаленных узлах, которые я наблюдаю. Это позволяет мне контролировать все мои системы с одного центрального сервера (ов), без необходимости копировать или устанавливать плагин на удаленных узлах.
Минусы SNMP:
Вы должны убедиться, что агент snmp установлен на каждом из удаленных узлов, на которых вы хотите отслеживать память. Тем не менее, эта установка будет разовой. Если в вашей среде вы используете инструменты автоматизации, такие как "повар", "марионетка" или аналогичные, тогда это не проблема.
Конфигурация агента 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,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
Ввод
free
в командном терминале дает следующий результат:
Данные представляют собой используемую/доступную память и значения памяти подкачки в килобайтах.
total - общая установленная память
used — память, используемая в настоящее время запущенными процессами (используется = всего — свободно — buff/cache)
free - неиспользуемая память (свободно=всего-использовано-баф/кэш)
shared - Память, совместно используемая несколькими процессами
буферы — память, зарезервированная ОС для выделения в качестве буферов, когда они нужны процессу.
cached - Недавно использованные файлы хранятся в оперативной памяти.
buff/cache - Буферы + Кэш
available - Оценка того, сколько памяти доступно для запуска новых приложений, без подкачки.
glances
еще один прекрасный вариант попробовать. Только
pip install Glances
или скачайте отсюда