Cara memeriksa proses mana yang menggunakan sebagian besar memori

33

Ketika saya memeriksa freedi salah satu server Prod, itu menunjukkan 70% dari memori sedang digunakan:

             total       used       free     shared    buffers     cached
Mem:     164923172  141171860   23751312          0    4555616   20648048
-/+ buffers/cache:  115968196   48954976
Swap:      8388600          0    8388600

Tapi saya tidak menemukan proses apa yang menggunakan memori, saya mencoba topperintah dan itu menunjukkan proses menggunakan memori hanya 1,1 dan 5,4%

Bagaimana saya bisa menemukan proses mana yang menggunakan memori?

Di bawah ini adalah hasil perintah teratas:

15085 couchbas  25   0 2784m 2.4g  40m S 183.7  1.5 299597:00 beam.smp
28248 tibco     18   0  124m 100m 3440 S 20.9  0.1   2721:45 tibemsd
15334 couchbas  15   0 9114m 8.6g 3288 S  9.0  5.4  12996:28 memcached
15335 couchbas  18   0  6024  600  468 S  2.0  0.0   1704:54 sigar_port
15319 couchbas  15   0  775m 2516  944 S  0.7  0.0 269:13.41 i386-linux-godu
12167 tibco     16   0 11284 1464  784 R  0.3  0.0   0:00.04 top
12701 root      15   0  451m 427m 2140 S  0.3  0.3  18:25.02 controller
13163 root      11  -5     0    0    0 S  0.3  0.0 289:58.58 vxglm_thread
sandeep
sumber
Terima kasih atas tanggapan cepat, Apakah ada cara untuk memeriksa semua file yang dibuka dan file mana yang memakan memeory.
1
Cobalah untuk mengurutkan output teratas - saat berjalan, tekan Shift + m
Eenoku

Jawaban:

50

Ini akan menunjukkan kepada Anda 10 proses teratas yang menggunakan sebagian besar memori:

ps aux --sort=-%mem | awk 'NR<=10{print $0}'

menggunakan top: ketika Anda membuka top press makan melakukan proses pendek berdasarkan penggunaan memori.

Tetapi ini tidak akan menyelesaikan masalah Anda, di Linux semuanya adalah file atau proses. jadi file yang Anda buka akan memakan memori juga. jadi ini tidak akan membantu.

lsof akan memberi Anda semua file yang dibuka dengan ukuran file atau file diimbangi dalam byte.

Hackaholic
sumber
5
Anda dapat menggunakan headbukan skrip awk ini - ini memberikan hasil yang sama dan Anda menghemat banyak karakter aneh.
Terbang styrofoam
9

Ram Anda tidak benar-benar digunakan. Linux hanya menyimpan cache pada disk Anda secara default, dan meletakkannya di bagian ram "bekas".

Jika Anda memuat aplikasi yang benar-benar menggunakan RAM itu, itu akan menjadi untuk digunakan.

Lihat http://www.linuxatemyram.com/

Jean-Michaël Celerier
sumber
Siapa yang mengatakan sesuatu tentang Linux?
Timothy Pulliam
OP memiliki proses "i386-linux-godu" berjalan
Jean-Michaël Celerier
6

Anda dapat menyalurkan ps dan mengurutkan untuk mendapatkan proses menggunakan sebagian besar memori. Ini juga akan memungkinkan Anda menentukan detail proses lain yang ingin Anda lihat dengannya:

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

PS: Di atas mengasumsikan bahwa kolom memori Anda adalah pertama " sort -k 1 -n -r "

Hynk
sumber
3

Anda dapat menggunakan perintah slabtop untuk melihat objek slab apa yang digunakan oleh kernel.
Anda juga dapat memeriksa output dari / proc / meminfo

Cari 2 baris ini di output

Slab:              68136 kB
SReclaimable:      21208 kB 

Contoh di atas menunjukkan 68MB cache slab sedang digunakan oleh kernel dan 21MB dapat direklamasi. Untuk mengklaim kembali, Anda dapat menggunakan teknik yang dijelaskan di sini https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  
Dmitry Zayats
sumber
1

Untuk analisis interaktif, Anda dapat menggunakan htop, lalu tekan tombol fungsi F6untuk memilih urutan, misalnya PERCENT_CPU(penggunaan memori dalam persen), M_RESIDENT(ukuran memori penduduk, memori nyata yang digunakan), M_SIZE(ukuran memori virtual) atau M_SHARE(ukuran memori). Berbagi memori). Dua yang pertama adalah angka yang relevan .

Garis hijau adalah utas. Tekan (huruf besar) Kdan Hsembunyikan.

Marc Wäckerlin
sumber