Mengikuti diskusi yang dibuat DI SINI tentang bagaimana PHP-FPM
memakan memori, saya baru saja menemukan masalah dalam membaca memori dalam top
perintah. Ini adalah screenshot dari saya top
setelah memulai ulang PHP-FPM
. Semuanya normal: sekitar 20 PHP-FPM
proses, masing-masing mengkonsumsi memori 5,5MB (0,3% dari total).
Berikut adalah server lama tepat sebelum memulai ulang PHP-FPM
(satu hari setelah restart sebelumnya). Di sini, kami masih memiliki sekitar 25 PHP-FPM
dengan 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?
free
identik.Jawaban:
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:Baris Mem menunjukkan total RAM dalam megabyte (
$n total
di atas), berapa banyak yang digunakan ($n used
di atas), berapa banyak yang gratis ($n free
di atas), berapa banyak yang dibagikan (abaikan itu), dan sekarang tiba bagian yang baik! Thebuffers
dancached
kolom dalamfree -m
berkorelasi dengan, diduga,$n buffers
dan$n cache
. Tapi lihat baris keduafree -m
yang 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 dalamfree -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).
sumber
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:
Pemakaian:
Keluaran:
sumber