Як я можу контролювати використання пам'яті?


265

Я раніше topбачив використання пам'яті. Але я хотів би контролювати використання пам'яті протягом певного періоду часу. Наприклад, почати моніторинг, а потім виконати кілька команд, а остаточне припинити моніторинг і подивитися, скільки пам’яті було використано протягом періоду.

Як я можу це зробити на сервері Ubuntu?

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

Відповіді:


322

Я рекомендую поєднувати попередні відповіді

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.


1
Дякую, це інформативно. Але в використовуваному стовпчику, який ви спочатку маєте, 2896а потім 1528для буферів, це не означає, що ви використовуєте 2896 + 1528?
Йонас

8
Mem: used- ваша загальна використана пам'ять. -/+ buffers/cache: used- ваша загальна використана пам'ять мінус буфери та кеш. Я знаю, що вихід виглядає смішно, але арифметики тут не потрібно. Ви просто шукаєте використане / безкоштовно в рядку - / + буфери / кеш.
Джастін Форс

6
Варіант -h набагато приємніший
frmdstryr

1
@frmdstryr Добрий момент! -h / - правда, люди не існували, коли я писав це. gitlab.com/procps-ng/procps/commit/…
Джастін Форс

3
@ cbradsh1 Ви можете просто зробити free -h, наприклад, watch -n 5 free -hщоб отримати "читабельний для людини" результат, наприклад, 2.1Gзамість того, 2170щоб виводити його.
Джастін Форс

213

Я думаю, що htopце найкраще рішення.

  • sudo apt-get install htop

Таким чином ви помітите, які програми використовують більшість оперативної пам’яті. і ви можете легко скасувати його, якщо захочете. Ось скріншот!


2
htopце приємно, тому що він більш "графічний" і, можливо, легше читати, ніж free.
mjswensen

1
я не розумію вихід. Чи RESвикористовується в пам'яті пам'ять, яку використовує ця програма? ЧОГО що SHR?
фазал

1
@faizal: віртуальна, зарезервована і спільна пам'ять.
WitchCraft

1
як htopпоказує вам "використання пам'яті протягом певного періоду часу"?
dangel

htop -s M_SHARE htop -s ЧАС
Tomachi

40

Якщо ви шукаєте приємного розбиття пам’яті, використовуваної кожним запущеним процесом, то я, можливо, рекомендую перевірити 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. У мене ще не було можливості зрозуміти, чому саме так.


Цікаво, чи розділена пам’ять між потоками. Він поділяється між процесами, чи не так? Принаймні на Windows ...
Томас Веллер

Отже, у цьому випадку спільна пам'ять відноситься до сторінок, які відображаються за допомогою декількох процесів у вигляді спільних бібліотек. Крім того, у контексті багатопотокових додатків весь простір пам'яті процесу доступний всім потокам у цьому процесі.
Джейсон Мок

4
Тепер доступний у PyPI ( pip install ps_mem) та на GitHub .
Leif Arne Storset

@ThomasWeller: Так, потоки завжди діляться пам’яттю, тоді як процеси можуть обмінюватися деякими або всіма частинами за певних умов.
Leif Arne Storset

для цього я використовую gnome-system-monitor

24

Використовуйте вільну команду. Наприклад, це вихід 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

Спасибі, виглядає чудово. Отже, це 947використання пам’яті за вирахуванням пам’яті, яка використовується для буферів і кеш-пам'яті?
Йонас

11

Команда watch може бути корисною. Спробуйте watch -n 5 freeвідстежувати використання пам'яті за допомогою оновлень кожні п’ять секунд.


Спасибі, це було чудово! Однак я вважаю за краще використовувати пам'ять в одному рядку, тому легко увійти в текстовий файл.
Йонас

8

Ви можете це зробити, використовуючи 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

1
додавання годинника на передню частину цієї команди робить це приголомшливо! як вwatch cat /proc/meminfo
Старійшина Гік

freeКоманда бере інформацію з /proc/meminfoі представляє їх у компактному вигляді. Використовувати free -hдля читаного людьми результату.
LoMaPh

4

Для візуального моніторингу загального використання оперативної пам’яті, якщо ви використовуєте Byobu , він збереже вашу пам’ять у правому нижньому куті терміналу і працюватиме, поки ви перебуваєте на будь-якому сеансі терміналу.

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

Byobu у використанні


3

Рішення та вихід на одну лінію:

free -m | grep "Mem:"

Ось приклад очікуваного виходу:

Mem:           3944         652         302          18        2990        2930

1

Я б використовував кактуси . Це відобразить графік використання вашої пам’яті тощо протягом певного періоду часу, і ви зможете перевірити їх використання за допомогою веб-браузера.


1

Моніторинг використання пам'яті

Я більше відповідаю одному з попередніх дописів, в якому згадуються кактуси як чудовий спосіб контролювати використання пам'яті. Однак, оскільки, схоже, кактуси вже не користуються популярністю в мейнстрімі, існує альтернативна програма для графічного зображення під назвою 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.