Setelah meneliti, masih bingung tentang pemantauan penggunaan RAM

10

Saya membaca artikel ini , yang menjelaskan berbagai metode untuk memeriksa penggunaan RAM Anda. Namun, saya tidak bisa mendamaikan metode yang berbeda dan tidak tahu mana yang benar.

Ketika saya pertama kali masuk, saya disambut dengan layar seperti ini:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Ini menunjukkan kepada saya bahwa saya menggunakan 41% dari RAM saya, yang tampaknya cukup tinggi karena server tidak melakukan banyak hal. Atau apakah angka itu merujuk pada sesuatu selain RAM?

Selanjutnya saya coba free -mmetode:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Menurut grafik penjelasan dalam artikel, ini menyiratkan saya memiliki 130MB RAM yang digunakan dan 459MB RAM gratis, yang menunjukkan saya menggunakan sekitar 22% dari RAM saya.

Selanjutnya saya jalankan top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Ini adalah yang paling membingungkan, karena ringkasan menunjukkan saya menggunakan 525MG dari total 604M, namun ketika menggunakan perintah interaktif "m" untuk mengurutkan berdasarkan memori teratas, proses teratas hanya menggunakan 0,3% dari memori ???

Akhirnya, psperintah tersebut juga menunjukkan penggunaan memori yang sangat sedikit:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Saya ingin seseorang mengoreksi kesalahpahaman apa pun yang saya miliki yang menciptakan konflik-konflik nyata ini.

Terima kasih!

EDIT untuk Rahul

Ouput dari cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Jonah
sumber
# 1) Perintah di atas untuk mengurutkan berdasarkan memori tidak m , itu M . # 2) Untuk melihat semua proses coba ** ps ax -o perintah, rss **; apa yang Anda jalankan hanya menunjukkan milik Anda sendiri.
tink
Harap perbarui juga keluaran kamicat /proc/meminfo
Rahul Patil
5
linuxatemyram.com
Michael Hampton
@tink, terima kasih atas penjelasannya. Saya mencoba ps ax -o rss | awk '{ sum+=$1} END {print sum}'sekarang dan 153156.
Jonah
@RahulPatil, OP diperbarui. Perhatikan bahwa proses yang berjalan mungkin sedikit berbeda dari angka aslinya, tetapi tidak boleh sejauh itu. Juga, hasil yang saya dapatkan untuk Anda tampaknya tidak cocok dengan hasil yang saya dapatkan untuk komentar dalam komentar di atas ini. Itu diambil hanya beberapa menit terpisah.
Jonah

Jawaban:

8

Anda hanya perlu memahami Konsep Memori

Sesuai Output Of / proc / meminfo Anda, Anda hanya perlu memperhatikan hal-hal di bawah ini:

Buffer : - Buffer adalah sesuatu yang belum "ditulis" ke disk. Ini mewakili berapa banyak RAM yang didedikasikan untuk blok cache disk. "Cached" mirip dengan "Buffer", hanya saja kali ini cache halaman dari pembacaan file

Cached : - Cache adalah sesuatu yang telah "dibaca" dari disk dan disimpan untuk digunakan nanti. Secara umum, Anda dapat mempertimbangkan area cache sebagai "bebas" RAM lain karena akan menyusut secara bertahap jika aplikasi menuntut lebih banyak memori.

Cukup untuk memahami bahwa "buffer" dan "Cached" mewakili ukuran cache sistem. Mereka secara dinamis tumbuh atau menyusut seperti yang diminta oleh mekanisme kernel Linux internal.

di Webhosting mereka melakukan cache dengan menggunakan cmd di bawah ini: (sebagian besar dikonfigurasi dalam cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Tautan Kutipan

EDIT untuk satu persyaratan lagi yaitu per penggunaan memori pengguna

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Silakan periksa dengan skrip di atas dan beri tahu saya, apakah itu ditampilkan dengan benar atau tidak.

Rahul Patil
sumber
Terima kasih, Rahul. Satu pertanyaan terakhir. Karena free -mtidak menyediakan cara untuk melihat memori yang digunakan per pengguna, apa cara akurat untuk menentukan berapa banyak RAM nyata yang dikonsumsi oleh pengguna tertentu? Ini muncul ketika memantau penggunaan memori Anda sendiri di server bersama, misalnya.
Jonah
@Jonah, saya telah memperbarui .. silakan periksa dan beri tahu saya
Rahul Patil
skrip itu tidak berfungsi seperti yang diharapkan .. tapi saya coba akan memperbarui segera
Rahul Patil
@Jonah terima kasih telah menerima ans saya .. tapi terima kasih yang nyata untuk MichaelHampton ...
Rahul Patil
2

Jawaban yang bagus @RahulPatil.

Poin lain yang perlu dipertimbangkan tentang ps atau top adalah sebagai berikut

Alat ini [exmap] lebih akurat daripada ps atau atas karena memperhitungkan pustaka bersama akun yang digunakan oleh banyak aplikasi. Misalnya, jika dua aplikasi menggunakan pustaka bersama yang sama, yang membutuhkan memori 1MB, ps akan menampilkan kedua aplikasi menggunakan memori ekstra 1MB, sedangkan exmap lebih tepat menampilkan setiap aplikasi menggunakan 500 KB. Keakuratan yang lebih besar ini sangat penting untuk menilai lingkungan desktop seperti KDE dan GNOME, yang menggunakan perpustakaan sangat banyak yang digunakan bersama antar aplikasi.

Melalui ibm / developerworks / linux_memory

Karena pertanyaan Anda merujuk ke server tanpa kepala - saya tidak yakin berapa banyak pelaporan ganda atau ps akan benar-benar dimiliki.

Yeow_Meng
sumber
0

Saya khawatir kita mungkin mengabaikan hal yang sudah jelas karena itu "tentu saja" bagi kebanyakan dari kita.

Jonah, maafkan saya jika saya salah, tetapi pertanyaan Anda sepertinya Anda mungkin tidak menyadari bahwa semua nilai ini, khususnya penggunaan CPU, biasanya akan sangat bervariasi dari detik ke detik.

Penggunaan CPU dapat berubah dari satu digit menjadi 100% secara instan saat proses baru dimulai tetapi dengan cepat (semoga) kembali ke kisaran sub-50%.

Penggunaan memori berubah lebih lambat tetapi di sana, Linux mencoba menggunakan memori yang tidak digunakan secara aktif dengan menjalankan proses untuk mengakses disk "caching". Sebagai contoh, ia mencoba untuk memprediksi apa yang perlu dibaca dari disk berikutnya, seperti mungkin sisa file besar setelah sebagian telah dibaca, dan memuatnya dalam cache. Beberapa nilai penggunaan memori termasuk memori yang digunakan oleh proses dan juga memori yang digunakan untuk cache. Pada sistem yang sudah berjalan beberapa saat, keduanya digabungkan mungkin akan 80-90% atau lebih.

Pertimbangkan juga bahwa proses yang Anda jalankan untuk menunjukkan penggunaan, seperti top, menggunakan CPU dan memori juga. Jika Anda menulis skrip dengan loop untuk melaporkan penggunaan CPU secara terus-menerus, hampir pasti akan selalu ditampilkan 100% karena tindakan melaporkan penggunaan itu sendiri (tanpa ada sleep penundaan) menggunakan semua CPU.

DocSalvager
sumber
Dok, terima kasih atas pemikirannya, tapi ini bukan masalahnya
Yunus