Sebelum benar-benar bertanya, hanya untuk menjadi jelas: ya, saya tahu tentang cache disk, dan tidak, ini bukan kasus saya :) Maaf, untuk pembukaan ini :)
Saya menggunakan CentOS 5. Setiap aplikasi dalam sistem bertukar berat, dan sistem ini sangat lambat. Ketika saya melakukannya free -m
, inilah yang saya dapat:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Jadi, saya sebenarnya hanya memiliki 42 Mb untuk digunakan! Sejauh yang saya mengerti, -/+ buffers/cache
sebenarnya tidak menghitung cache disk, jadi saya memang hanya memiliki 42 Mb, kan? Saya pikir, saya mungkin salah, jadi saya mencoba mematikan caching disk dan itu tidak berpengaruh - gambarnya tetap sama.
Jadi, saya memutuskan untuk mencari tahu siapa yang menggunakan semua RAM saya, dan saya menggunakannya top
untuk itu. Tapi, ternyata, ini melaporkan bahwa tidak ada proses yang menggunakan RAM saya. Satu-satunya proses di atas saya adalah MySQL, tetapi menggunakan 0,1% dari RAM dan 400Mb swap. Gambar yang sama ketika saya mencoba menjalankan layanan atau aplikasi lain - semuanya masuk swap, top
menunjukkan bahwa MEM tidak digunakan (maksimum 0,1% untuk proses apa pun).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Restart tidak membantu, dan, dengan cara mereka sangat lambat, yang biasanya tidak saya harapkan pada mesin ini (4 core, 4Gb RAM, RAID1).
Jadi, dengan itu - saya cukup yakin bahwa ini bukan cache disk, yang menggunakan RAM, karena biasanya itu harus dikurangi dan membiarkan proses lain untuk menggunakan RAM, daripada beralih ke swap.
Jadi, akhirnya, pertanyaannya adalah - jika seseorang memiliki ide bagaimana mengetahui proses apa yang sebenarnya menggunakan memori begitu banyak?
sumber
irc.freenode.org
. Saya memang membuat ruang obrolan untuk diskusi panjang di sini .free -m
, tetapi ukurannya dapat ditanyakan dengan Linux dengancat /proc/spl/kstat/zfs/arcstats | grep data_size
.Jawaban:
Di Linux dalam
top
proses Anda dapat menekan<
tombol untuk menggeser jenis tampilan keluaran ke kiri. Secara default itu diurutkan oleh%CPU
jadi jika Anda menekan tombol 4 kali Anda akan mengurutkannya denganVIRT
yang mana adalah ukuran memori virtual yang memberikan jawaban Anda.Cara lain untuk melakukan ini adalah:
harus memberi Anda dan output diurutkan berdasarkan proses ukuran virtual.
Ini versi panjangnya:
sumber
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
di server Ubuntu 11.10.-o
opsi. RHEL4 ini berfungsi. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
bekerja. Saya akan mencoba 11,10 nanti malam tetapi jika Anda menemukan opsi pengurutan yang tepat sebelum beri tahu saya.ps -e -o pid,vsz,comm | sort -n -k 2
mungkin berfungsi tetapi saya tidak memiliki tempat untuk memverifikasi saat ini.-ef
pilihan itu. Tetapi ini tampaknya menghasilkan keluaran yang masuk akal:sudo ps axo pid,vsz,comm=|sort -n -k 2
<
saya tidak tahu itu mungkin, fedoraps -e --format=pid,rss,args | sort --numeric-sort --key=2
Tampilkan memori proses dalam megabyte dan jalur proses.
sumber
Hanya catatan di server yang menunjukkan gejala yang sama tetapi masih menunjukkan kehabisan memori. Yang akhirnya menemukan adalah sysctl.conf dari sebuah kotak dengan 32 GB RAM dan pengaturan untuk DB dengan halaman besar yang dikonfigurasikan ke 12000. Kotak ini hanya memiliki 2 GB RAM sehingga ia menetapkan semua RAM gratis ke halaman besar (hanya 960 dari mereka). Mengatur halaman besar menjadi 10, karena tidak ada yang digunakan, membebaskan semua memori.
Pemeriksaan cepat / proc / meminfo untuk mencari pengaturan HugePages_ bisa menjadi awal yang baik untuk memecahkan masalah setidaknya satu hog memori yang tidak terduga.
sumber
Dalam kasus saya masalahnya adalah bahwa server adalah server virtual VMware dengan
vmw_balloon
modul diaktifkan:Berlari:
Jadi sekitar 5 GB memori sebenarnya direklamasi oleh tuan rumah. Jadi meskipun memiliki 8 GB untuk VM saya "secara resmi", dalam praktiknya itu jauh lebih sedikit:
sumber
Anda juga dapat menggunakan perintah ps untuk mendapatkan informasi lebih lanjut tentang proses.
sumber
Saya mereferensikan ini dan Total memori yang digunakan oleh proses Python? - Stack Overflow , itu jawaban saya. Saya mendapatkan alat hitung proses (python) tertentu, sekarang.
Lampirkan daftar proses saya.
Referensi
sumber
Buat skrip bernama
show-memory-usage.sh
dengan konten:sumber
Ini juga mengambil id proses, mengurutkan berdasarkan MB yang digunakan, dan menguraikan perintah (yang menciptakan proses):
ps aux | awk '{print $6/1024 " MB\t\t" $2 "\t" $11}' | sort -n
sumber
Server ubuntu saya DISTRIB RELEASE = 18,04 di Hyper-V menggunakan sebagian besar memori, tetapi semua proses baik-baik saja. (Diakui saya telah menghapus paket snapd dan unattended-upgrade, tetapi 95% memori masih digunakan.)
Jawabannya adalah Hyper-V memiliki memori dinamis, jadi butuh memori untuk penggunaan sistem utama dan ubuntu menandainya seperti yang digunakan.
Semoga ini bisa membantu seseorang.
sumber