Bagaimana menafsirkan output dari perintah 'top' Linux?


27

Mengikuti diskusi yang dibuat DI SINI tentang bagaimana PHP-FPMmemakan memori, saya baru saja menemukan masalah dalam membaca memori dalam topperintah. Ini adalah screenshot dari saya topsetelah memulai ulang PHP-FPM. Semuanya normal: sekitar 20 PHP-FPMproses, masing-masing mengkonsumsi memori 5,5MB (0,3% dari total).

masukkan deskripsi gambar di sini

Berikut adalah server lama tepat sebelum memulai ulang PHP-FPM(satu hari setelah restart sebelumnya). Di sini, kami masih memiliki sekitar 25 PHP-FPMdengan penggunaan memori ganda (10MB menunjukkan 0,5% dari total). Dengan demikian, total memori yang digunakan harus 600-700 MB. Lalu, mengapa memori 1,6GB telah digunakan?

masukkan deskripsi gambar di sini



@emiliki tidak, bukan itu yang terjadi di sini. Saya sudah memeriksa semua hal ini. Ini adalah sesuatu yang terhubung dengan PHP-FPM, dan memori akan dibebaskan dengan memulai kembali PHP-FPM saja. Bagaimanapun, nilai-nilai Mem dan buffer / cache dalam freeidentik.
Googlebot

6
Sepertinya Anda menjalankan Virtuozzo "VM". Semua taruhan dimatikan sejauh akuntansi kehabisan berjalan pada hal-hal itu.
womble


Dear womble dan ephemient: Saya mencuri kedua jawaban Anda! cackles
Wesley

Jawaban:


34

TL; DR 1

Server Anda berada dalam wadah virtuozzo / openvz / virtualization-du-jour . Mencoba memahami penggunaan memori memiringkan kincir angin.

TL; DR 2

Linux memakan RAM Anda! Tapi tidak apa-apa, itu berlaku untuk semua orang.


Kisah Panjang

Mari kita jatuhkan!

Di Mem:bagian ini kami memiliki:

  • $n total: jumlah RAM fisik di mesin Anda
  • $n used: berapa banyak memori yang dikonsumsi oleh Linux, bukan hanya jumlah dari proses.
  • $n free: Berapa banyak RAM yang tidak dikonsumsi oleh Linux. Ini tidak memperhitungkan bahwa memori yang di-cache dan buffer pada dasarnya "bebas".
  • $n buffers: ruang penyangga adalah tempat blok I / O disk telah dibaca atau menunggu penulisan disimpan. Buffer adalah representasi RAM dari blok disk tunggal.

Di Swap:bagian ini kami memiliki:

  • $n total: Cukup jelas. Jumlah ruang disk yang tersedia untuk bertukar halaman ke.
  • $n used: Cukup jelas. Berapa banyak ruang swap disk yang digunakan.
  • $n free: Herp Derp.
  • $n cache: Terkait erat dengan buffer di atas. Ini sebenarnya bagian dari cache halaman dan itu sendiri tidak memiliki ruang pada disk fisik. Jangan khawatir tentang detail untuk percakapan ini.

Bagian yang menarik datang ketika Anda berlari free -m. Anda akan melihat tiga baris, dan semua angka akan berkorelasi dengan atas. Saya akan memberikan PC saya sendiri sebagai contoh:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Baris Mem menunjukkan total RAM dalam megabyte ( $n totaldi atas), berapa banyak yang digunakan ( $n useddi atas), berapa banyak yang gratis ( $n freedi atas), berapa banyak yang dibagikan (abaikan itu), dan sekarang tiba bagian yang baik! The buffersdan cachedkolom dalam free -mberkorelasi dengan, diduga, $n buffersdan $n cache. Tapi lihat baris kedua free -myang dimulai dengan -/+ buffers/cache:. Matematika menunjukkan bahwa jumlah yang digunakan benar-benar (total) - ((digunakan-buffer) -cached). Gratis adalah (total) - (yang Baru Digunakan).

Apa artinya semua ini? Itu artinya Linux memakan RAM Anda! Ceritanya adalah bahwa kernel Linux melahap RAM karena tersedia untuk digunakan untuk cache disk. Tidak ada yang dapat Anda lakukan kecuali Anda ingin mencoba mengkompilasi kernel kustom. Kiat Pro: Jangan.

RAM benar-benar ada dan gratis untuk proses yang digunakan sesuai keinginan mereka. Itulah yang dimaksud dengan -/+ buffers/cache:baris dalam free -m. Namun, Anda berada di dalam wadah virtualisasi non hyper-visor yang membuat hal-hal sedikit tupai. Anda tidak bisa mengambil stok memori Anda dengan akurasi byte pada saat ini. Namun, Anda tidak melihat perilaku yang sangat tidak biasa.

Tetap tenang dan terus berjalan. Juga, dapatkan server fisik (kecuali Anda menyukai statistik memori yang terlihat seperti Kreskin adalah SysAdmin Anda).


Bukankah jumlah yang digunakan adalah ((buffer digunakan) -cached)?
mac

1

Top bukan cara terbaik untuk memeriksa penggunaan memori. Namun, karena pertanyaan saya ditandai sebagai duplikat dari pertanyaan ini, saya akan memposting resolusi saya di sini.

Saya membaca di forum bahwa ps_mem.py akan memeriksa penggunaan memori untuk Anda.

Repositori: https://github.com/pixelb/ps_mem/

Unduh:

pip install ps_mem

Pemakaian:

ps_mem

Keluaran:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.