Bagaimana saya bisa memonitor penggunaan memori?

265

Saya sudah terbiasa topmelihat penggunaan memori saat ini. Tetapi saya ingin memantau penggunaan memori selama periode waktu tertentu. Misalnya mulai pemantauan dan kemudian jalankan beberapa perintah, dan terakhir hentikan pemantauan dan lihat berapa banyak memori yang telah digunakan selama periode tersebut.

Bagaimana saya bisa melakukan ini di Server Ubuntu?

Saya kira saya bisa memulai cronjob setiap 5 detik atau lebih, dan menjalankan perintah yang mencatat penggunaan memori saat ini dalam file teks. Tetapi perintah apa yang harus saya gunakan untuk mendapatkan penggunaan memori saat ini dalam format yang mudah untuk login ke file teks?

Jonas
sumber

Jawaban:

322

Saya sarankan menggabungkan jawaban sebelumnya

watch -n 5 free -m

Perhatikan bahwa Linux suka menggunakan memori tambahan apa pun untuk cache blok hard drive . Jadi Anda tidak ingin melihat yang gratis saja Mem. Anda ingin melihat freekolom -/+ buffers/cache:baris. Ini menunjukkan berapa banyak memori yang tersedia untuk aplikasi. Jadi saya hanya berlari free -mdan mendapatkan ini:

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

Saya tahu bahwa saya menggunakan 1528 MB dan memiliki 2170 MB gratis.

Catatan: Untuk menghentikan watchsiklus ini, Anda cukup menekan Ctrl+ C.

Justin Force
sumber
1
Terima kasih, itu informatif. Tetapi pada kolom yang digunakan pertama kali Anda miliki 2896dan kemudian 1528untuk buffer, bukankah ini berarti Anda menggunakannya 2896 + 1528?
Jonas
8
Mem: usedadalah total memori yang digunakan. -/+ buffers/cache: usedadalah total memori yang digunakan dikurangi buffer dan cache. Saya tahu outputnya terlihat lucu, tetapi tidak diperlukan aritmatika di sini. Anda hanya mencari bekas / gratis di baris - / + buffer / cache.
Justin Force
6
Opsi -h jauh lebih baik
frmdstryr
1
@ frmdstryr Poin bagus! -h / - manusia tidak ada ketika saya menulis ini. gitlab.com/procps-ng/procps/commit/…
Justin Force
3
@ cbradsh1 Anda cukup melakukannya free -h, misalnya watch -n 5 free -huntuk mendapatkan keluaran "yang bisa dibaca manusia", misalnya 2.1Galih-alih 2170dalam keluaran.
Justin Force
213

Saya pikir htopini solusi terbaik.

  • sudo apt-get install htop

Dengan cara ini Anda akan melihat program apa yang menggunakan sebagian besar RAM. dan Anda dapat dengan mudah menghentikannya jika mau. Ini screenshotnya!

Alvar
sumber
2
htopbagus karena lebih "grafis" dan mungkin lebih mudah dibaca daripada free.
mjswensen
1
saya tidak mengerti outputnya. Apakah RESmemori yang digunakan oleh aplikasi itu dalam MB? Lalu apa SHR?
faizal
1
@faizal: virtual, reserved & shared memory.
WitchCraft
1
bagaimana cara htopmenunjukkan 'penggunaan memori selama periode waktu'?
dangel
htop -s M_SHARE htop -s TIME
Tomachi
40

Jika Anda mencari pemecahan memori yang bagus yang digunakan oleh setiap proses yang sedang berjalan, maka saya mungkin merekomendasikan untuk memeriksa ps_mem.py (ditemukan di sini di pixelbeat.org).

Saya tahu dalam komentar di atas, Anda menyebutkan menginginkan snapshot satu baris dari gratis , tetapi saya pikir orang lain mungkin menganggap ini berguna.

Contoh output:

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

Satu-satunya bagian yang saya tidak suka adalah kenyataan bahwa skrip mengklaim membutuhkan hak akses root. Saya belum memiliki kesempatan untuk melihat mengapa hal ini terjadi.

Jason Mock
sumber
Saya bertanya-tanya apakah memori dibagi di antara utas. Itu dibagi antara proses, bukan? Setidaknya di Windows ...
Thomas Weller
Jadi kasus ini, memori bersama merujuk ke halaman yang dipetakan oleh beberapa proses dalam bentuk perpustakaan bersama. Selain itu dalam konteks aplikasi multi-utas, seluruh ruang memori proses dapat diakses oleh semua utas dalam proses itu.
Jason Mock
4
Sekarang tersedia dalam PyPI ( pip install ps_mem) dan di GitHub .
Leif Arne Storset
@ThomasWeller: Ya, utas selalu berbagi memori, sedangkan proses dapat membagikan sebagian atau semua itu dalam kondisi tertentu.
Leif Arne Storset
untuk ini saya menggunakan gnome-system-monitor
24

Gunakan perintah gratis . Misalnya, ini adalah ouput dari 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 /+ hanya akan mengembalikan baris kedua:

-/+ buffers/cache:        947       1064
Yesaya
sumber
Terima kasih, terlihat hebat. Jadi ini 947adalah penggunaan memori dikurangi memori yang digunakan untuk buffer dan cache?
Jonas
11

The menonton perintah mungkin berguna. Cobalah watch -n 5 freeuntuk memantau penggunaan memori dengan pembaruan setiap lima detik.

senapan
sumber
Terima kasih, ini hebat! Namun, saya lebih suka mendapatkan penggunaan memori pada satu baris, jadi mudah untuk login ke file teks.
Jonas
8

Anda bisa melakukannya menggunakan 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
Amir
sumber
1
menambahkan arloji ke bagian depan perintah ini membuatnya luar biasa! seperti dalamwatch cat /proc/meminfo
Penatua Geek
The freeperintah mengambil informasi dari /proc/meminfodan menyajikan mereka dengan cara yang kompak. Gunakan free -huntuk keluaran yang bisa dibaca manusia.
LoMaPh
4

Untuk pemantauan visual dari keseluruhan penggunaan RAM, jika Anda menggunakan Byobu , itu akan menjaga penggunaan memori Anda di sudut kanan bawah terminal dan akan berjalan saat Anda berada di sesi terminal apa pun.

Seperti yang dapat Anda lihat dari tangkapan layar, mesin virtual saya memiliki uptime 1h3m, beban 0,00, memiliki prosesor 2,8GHz (virtual) dan 994MB (21%) dari RAM yang tersedia pada sistem.

Byobu sedang digunakan

bafromca
sumber
3

Solusi dan output jalur tunggal:

free -m | grep "Mem:"

Berikut adalah contoh dari output yang diharapkan:

Mem:           3944         652         302          18        2990        2930
Tim
sumber
1

Saya akan menggunakan Cacti . Ini akan menggambarkan penggunaan memori Anda dll. Selama periode waktu tertentu, dan Anda akan dapat memeriksa penggunaan menggunakan browser web Anda.

Mat
sumber
1

Memonitor Penggunaan Memori

Saya lebih sejalan dengan salah satu posting sebelumnya yang menyebutkan Cacti sebagai cara yang bagus untuk memantau penggunaan memori. Namun, karena tampaknya kaktus tidak lagi populer di arus utama, ada aplikasi grafik alternatif bernama Graphite.

Graphite relatif mudah dipasang di server ubuntu dan untuk menginstalnya, Anda dapat memeriksa tautan ini untuk prosedur instalasi yang mudah diikuti.

Setelah grafit diinstal, sekarang, Anda dapat mengirim metrik memori ke sana, pada interval mana pun yang Anda inginkan; setiap 5 detik, setiap menit, setiap jam ... dll.

Untuk membuat grafik metrik memori, seperti yang telah disarankan dalam posting sebelumnya, Anda dapat menulis skrip Anda sendiri menggunakan alat sistem untuk mengumpulkan informasi memori yang diperlukan. Atau, Anda dapat menggunakan plugin snmp prewritten yang akan melakukan semua pekerjaan untuk Anda.

Jika Anda ingin menulis skrip memori Anda sendiri, akan lebih bijak untuk memastikan Anda memperhitungkan memori buffered dan cache ketika menghitung memori yang digunakan, jika tidak, Anda akhirnya akan mengumpulkan data palsu.

Jika Anda ingin menggunakan plugin snmp yang sudah melakukan semua perhitungan yang diperlukan untuk Anda, berikut ini tautan yang berfungsi dengan baik: checkMemoryviaSNMP .

Pro SNMP:

Saya telah menginstal snmp pada semua node jarak jauh yang saya monitor. Ini memungkinkan saya untuk memonitor semua sistem saya dari satu server pusat , tanpa harus menyalin atau meletakkan plugin pada node jarak jauh.

Kekurangan SNMP:

Anda harus memastikan agen snmp diinstal pada masing-masing node jarak jauh yang ingin Anda pantau memori. Namun, instalasi ini akan menjadi kesepakatan satu kali. Jika Anda menggunakan alat otomatisasi seperti koki atau boneka atau alat serupa di lingkungan Anda, maka ini bukan masalah sama sekali.

Konfigurasi agen SNMP pada node jarak jauh:

Setelah agen snmp diinstal, cukup vi file /etc/snmpd/snmpd.conf dan tambahkan baris ini ke dalamnya:

rocommunity  (specify-a-community-string-aka-password-here)

Kemudian restart agen snmpd, dengan:

/etc/init.d/snmpd restart

Kemudian, di server pusat Anda, dari mana Anda memantau semua server Anda yang lain, Anda dapat menjalankan perintah berikut:

$ 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
sumber