Saya memiliki server dengan memori 12G. Sebuah fragmen atas ditunjukkan di bawah ini:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
Ini free -m
menunjukkan sebagai berikut:
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
Jika saya mengerti dengan benar, sistem hanya memiliki 362 MB memori yang tersedia. Pertanyaan saya adalah: Bagaimana saya bisa mengetahui proses mana yang menghabiskan sebagian besar memori?
Sama seperti info latar belakang, sistem sedang berjalan 64bit OpenSuse 12
.
Jawaban:
Pertama, ulangi mantra ini sebentar: "ingatan yang tidak terpakai adalah ingatan yang sia-sia". Kernel Linux menyimpan sekitar sejumlah besar metadata file dan file yang diminta, sampai sesuatu yang terlihat lebih penting mendorong data itu keluar. Itu sebabnya Anda dapat menjalankan:
dan memiliki
find
instance kedua berjalan dengan kecepatan konyol.Linux hanya menyisakan sedikit memori 'gratis' untuk menangani lonjakan penggunaan memori tanpa terlalu banyak usaha.
Kedua, Anda ingin menemukan proses yang memakan semua ingatan Anda; di
top
gunakanM
perintah untuk mengurutkan berdasarkan penggunaan memori. Jangan ragu untuk mengabaikanVIRT
kolom, yang hanya memberi tahu Anda berapa banyak memori virtual yang telah dialokasikan, bukan berapa banyak memori yang digunakan proses.RES
laporan berapa banyak memori penduduk , atau saat di ram (sebagai lawan bertukar ke disk atau pernah benar-benar dialokasikan di tempat pertama, meskipun diminta).Tapi, karena
RES
akan menghitung misalnya/lib/libc.so.6
memori sekali untuk hampir setiap proses, itu bukan ukuran yang luar biasa dari berapa banyak memori yang digunakan proses. TheSHR
laporan kolom berapa banyak memori yang dibagi dengan proses lainnya, tetapi tidak ada jaminan bahwa proses lain sebenarnya berbagi - itu bisa menjadi sharable, hanya ada satu keinginan lain untuk berbagi.The
smem
Alat ini dirancang untuk pengukur bantuan pengguna yang lebih baik hanya berapa banyak memori harus benar-benar disalahkan pada setiap proses individu. Itu beberapa pekerjaan pintar untuk mencari tahu apa yang benar-benar unik, apa yang dibagikan, dan secara proporsional menghitung memori bersama dengan proses berbagi itu.smem
mungkin membantu Anda memahami ke mana ingatan Anda lebih baik daripadatop
kehendak, tetapitop
merupakan alat pertama yang bagus.sumber
/proc/meminfo
dan/proc/slabinfo
file rinci apa kernel menggunakan penyimpanan untuk -slabtop
Program ini sangat banyak sepertitop
, tapi menunjukkan yang mana dari penyalur slab telah mengalokasikan berapa banyak, apa yang rasio mereka seperti, dllgunakan tip cepat menggunakan perintah top di linux / unix
dan kemudian tekan Shift+ m(yaitu menulis modal
M
).Dari
man top
Atau sebagai alternatif: tekan Shift+ f, lalu pilih tampilan untuk dipesan dengan penggunaan memori dengan menekan tombol nlalu tekan Enter. Anda akan melihat proses aktif yang dipesan oleh penggunaan memori
sumber
M
(Shift
+m
)top -o mem -O cpu
top -o RES
sebaliknya "nama bidang 'mem' tidak dikenal"(Menambahkan -n angka numerik untuk mengurutkan perintah.)
sumber
ps aux --sort '%mem'
sebagaimana dijelaskan dalam jawaban sayaPertama, Anda harus membaca penjelasan tentang output dari
free
. Intinya: Anda memiliki setidaknya 10,7 GB memori yang siap digunakan oleh proses.Maka Anda harus mendefinisikan apa "penggunaan memori" untuk suatu proses (itu tidak mudah atau tidak ambigu, percayalah).
Maka kita mungkin dapat membantu lebih banyak :-)
sumber
Daftar dan Urutkan Proses berdasarkan Penggunaan Memori:
sumber
ps -e -orss=,args= | sort -nr | head
ps aux --sort '%mem'
from procps 'ps (default pada Ubuntu 12.04) menghasilkan output seperti:
Jadi di sini Firefox adalah konsumen teratas dengan 16% dari memori saya.
Anda mungkin juga tertarik dengan:
sumber
Anda dapat menentukan kolom mana yang akan disortir, dengan langkah-langkah berikut:
sumber
Anda dapat melihat penggunaan memori dengan menjalankan kode ini di terminal Anda:
sumber
Cara menjumlahkan memori yang digunakan berdasarkan nama proses:
Kadang-kadang bahkan melihat proses tunggal terbesar masih ada banyak memori yang digunakan tidak terhitung. Untuk memeriksa apakah ada banyak proses lebih kecil yang sama menggunakan memori, Anda dapat menggunakan perintah seperti berikut ini yang menggunakan awk untuk meringkas total memori yang digunakan oleh proses dengan nama yang sama:
misalnya keluaran
sumber
Ini kedua kalinya
Terus memperbarui
Saya juga menambahkan beberapa barang di sini yang mungkin Anda hargai (atau Anda mungkin abaikan)
-n 1
tonton dan perbarui setiap detik-U $(whoami)
Untuk hanya menampilkan proses Anda. $ (beberapa perintah) mengevaluasi sekarang| head -n4
Untuk hanya menampilkan tajuk dan 3 proses pada satu waktu bc sering kali Anda hanya perlu item baris penggunaan tinggi${1-4}
mengatakan argumen pertama saya,$1
saya ingin default ke 4, kecuali saya berikanJika Anda menggunakan mac, Anda mungkin perlu menginstal arloji terlebih dahulu, instal arloji
Atau Anda dapat menggunakan fungsi
sumber
-m
ke-r
Anda memiliki perintah sederhana ini:
sumber