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

В следующей статье описывается общая процедура возврата / понижения до стандартных версий пакетов репозитория или даже подсистемы, если ваша система становится нестабильной после установки пакетов после тестирования PPA:

http: // oldpapyrus.wordpress.com/2013/10/20/rescue-ubuntu-from-unstable-ppa-issues/

252
задан 27.10.2019, 12:22

10 ответов

Вы можете сделать это, используя 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
0
ответ дан 27.10.2019, 12:22
  • 1
    добавление часов в начало этой команды делает ее классной! как в watch cat /proc/meminfo – srmilon 27.10.2019, 12:23
  • 2
    Команда free берет информацию из /proc/meminfo и представляет их в компактной форме. Используйте free -h для удобочитаемого вывода. – automatix 27.10.2019, 12:23

Используйте команду free . Например, это вывод 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
0
ответ дан 27.10.2019, 12:23
  • 1
    Спасибо, выглядит отлично. Итак, это 947 - использование памяти минус память, используемая для буферов и кешей? – Faridul Khan 27.10.2019, 12:23

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

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

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

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

0
ответ дан 27.10.2019, 12:23
  • 1
    Интересно, распределяется ли память между потоками? Разделяется ли он между процессами, не так ли? По крайней мере, на Windows ... – Barry 27.10.2019, 12:24
  • 2
    Таким образом, в этом случае общая память относится к страницам, которые отображаются несколькими процессами в форме общих библиотек. Кроме того, в контексте многопоточных приложений все пространство памяти процесса доступно всем потокам в этом процессе. – Luís Cruz 27.10.2019, 12:24
  • 3
    @ThomasWeller: Да, потоки всегда совместно используют память, тогда как процессы могут совместно использовать ее частично или полностью при определенных условиях. – Jeffz 27.10.2019, 12:24
  • 4
    Теперь доступно в PyPI (pip install ps_mem) и на GitHub . – Samiron Barai 27.10.2019, 12:25
  • 5
    для этого я использую gnome-system-monitor – Mujibur 27.10.2019, 12:25

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

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 .

0
ответ дан 27.10.2019, 12:24
  • 1
    Спасибо, это информативно. Но в используемом столбце у вас сначала есть 2896, а затем 1528 для буферов, не означает ли это, что вы используете 2896 + 1528? – mosid 27.10.2019, 12:24
  • 2
    Mem: used ваша общая используемая память. -/+ buffers/cache: used - ваша общая используемая память минус буферов и кеша. Я знаю, что результат выглядит забавно, но здесь не требуется арифметика. Вы просто ищете используется / бесплатно в строке - / + buffers / cache. – timgavin 27.10.2019, 12:24
  • 3
    @ cbradsh1 Вы можете просто сделать free -h, например watch -n 5 free -h, чтобы получить «удобочитаемый для человека»; выход, например 2.1G вместо 2170 на выходе. – Captain Hypertext 27.10.2019, 12:25
  • 4
    Опция -h намного приятнее – dave 27.10.2019, 12:25
  • 5
    @frmdstryr Хороший вопрос! -h / - человек не существовал, когда я написал это, хотя. gitlab.com/procps-ng/procps/commit/… – Bhavin Thummar 27.10.2019, 12:26

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

  • sudo apt-get install htop

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

0
ответ дан 27.10.2019, 12:24
  • 1
    @faizal: виртуальный, зарезервированный & amp; Общая память. – Community 27.10.2019, 12:25
  • 2
    htop -s M_SHARE htop -s ВРЕМЯ – Mike_NotGuilty 27.10.2019, 12:25
  • 3
    htop хорошо, потому что это более «графический» и, возможно, легче читать, чем free. – Rafael 27.10.2019, 12:25
  • 4
    как htop показывает вам «использование памяти за период времени»? – Damilola Olowookere 27.10.2019, 12:26
  • 5
    я не понимаю вывод. Является ли RES память, используемая этим приложением, в МБ? Тогда что такое SHR? – Casey 27.10.2019, 12:26

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

Я больше согласен с одним из предыдущих постов, которые упоминали Cacti как отличный способ контролировать использование памяти. Однако, поскольку кажется, что кактусы больше не популярны в мейнстриме, есть альтернативное графическое приложение под названием 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
0
ответ дан 27.10.2019, 12:25

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

0
ответ дан 27.10.2019, 12:25
  • 1
    Спасибо, это было здорово! Тем не менее, я бы предпочел, чтобы память использовалась в одной строке, поэтому легко войти в текстовый файл. – Shadow 27.10.2019, 12:26

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

free -m | grep "Mem:"

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

Mem:           3944         652         302          18        2990        2930
0
ответ дан 27.10.2019, 12:26
  • 1
    Это также позволит вам увидеть использование памяти на данный момент ... – Barry 27.10.2019, 12:26

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

0
ответ дан 27.10.2019, 12:26

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

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

Byobu in use

0
ответ дан 27.10.2019, 12:27

Теги

Похожие вопросы