Penggunaan memori tinggi tetapi tidak ada proses yang menggunakannya

17

Saya menjalankan free -mVM debian yang berjalan di Hyper-V:

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

Jadi dari 10GB memori saya, 8.5GB sedang digunakan dan hanya 1500MB gratis (tidak termasuk cache).

Tetapi saya kesulitan menemukan apa yang menggunakan memori. Output dari ps aux | awk '{sum+=$6} END {print sum / 1024}', yang seharusnya menambah pemanfaatan RSS adalah:

1005.2

Dengan kata lain, proses saya hanya menggunakan memori 1GB tetapi sistem secara keseluruhan (tidak termasuk cache) menggunakan 8.5GB.

Apa yang bisa menggunakan 7.5GB lainnya?

ps: Saya memiliki server lain dengan konfigurasi serupa yang menunjukkan mem digunakan 1200 (mem bebas = 8.8GB) dan jumlah penggunaan RSS dalam ps adalah 900 yang lebih dekat dengan apa yang saya harapkan ...


EDIT

cat /proc/meminfo pada mesin 1 (memori rendah):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo pada mesin 2 (penggunaan memori normal):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB
assylias
sumber

Jawaban:

15

Saya mengerti Anda menggunakan Hyper-V, tetapi konsepnya serupa. Mungkin ini akan membuat Anda di jalur yang benar.

Masalah Anda kemungkinan karena balon memori virtual, teknik yang digunakan hypervisor untuk mengoptimalkan memori. Lihat tautan ini untuk keterangan

Saya mengamati gejala yang sama persis dengan VM saya di vSphere. Mesin 4G tanpa apa-apa berjalan di atasnya akan melaporkan 30M digunakan oleh cache, tetapi lebih dari 3G "digunakan" di baris "- / + buffer".

Berikut contoh output dari perintah statistik VMWare. Ini menunjukkan seberapa dekat dengan 3G ditempelkan ke jumlah "bekas" saya:

vmware-toolbox-cmd stat balloon
3264 MB

Dalam kasus saya, agak jelas, pengemudi balon saya menggunakan ~ 3G

Saya tidak yakin apa perintah yang sama di Hyper-V adalah untuk mendapatkan statistik balon Anda, tetapi saya yakin Anda akan mendapatkan hasil yang serupa

Mat
sumber
Terima kasih - Anda pasti menyukai sesuatu. lsmod | grep hv_ menunjukkan hv_balloon pada mesin memori rendah tetapi tidak pada yang lain - jadi modul balon dimuat pada satu dan bukan yang lain. Dan perilakunya terlihat sangat mirip dengan deskripsi ini .
assylias
Tidak yakin apa yang setara dengan vmware-toolbox-cmdpada Hyper V sekalipun.
assylias
@assylias saya tahu, maaf. Saya melihat diri saya sendiri ketika menulis jawaban ini dan muncul kosong. Namun, jika Anda menulis sebuah program yang dengan cepat mengalokasikan banyak memori, itu dapat meyakinkan hypervisor bahwa VM Anda membutuhkan sumber daya. Mirip dengan kasus uji pengusiran cache disk, tetapi penyebab root berbeda.
Matt
Anda dapat menghapus fitur ram dinamis di Hyper-V untuk menyelesaikan masalah ini.
Ashish Negi
Saya benar-benar tidak melihat solusinya di sini.
Jamie Hutber
1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

Jawaban singkat: kernel menggunakan buffer / memori cache untuk berbagai tugas, seperti file caching. Memori ini tersedia untuk aplikasi jika diperlukan, jadi Anda benar mengatakan Anda telah menggunakan 944 MB.

vik
sumber
Menurut tautan itu, 944MB adalah jumlah cache
assylias
2
Tidak, 944MB adalah jumlah RAM yang sebenarnya digunakan oleh aplikasi dan tidak tersedia untuk aplikasi lain. Baca kembali postingan itu: "Linux (seperti kebanyakan OS modern) akan selalu mencoba menggunakan RAM gratis untuk hal-hal caching, jadi Mem: gratis hampir selalu sangat rendah. Oleh karena itu baris - / + buffer / cache: ditampilkan, karena ia menunjukkan berapa banyak memori yang gratis ketika mengabaikan cache; cache akan dibebaskan secara otomatis jika memori menjadi langka, sehingga mereka tidak terlalu penting. "
vik
ya dan - / + buffer / cache menunjukkan memori bebas
1,5GB
Harap pahami 1485 gratis dalam cache - / + buffer TIDAK BANYAK jumlah memori yang tersedia untuk aplikasi pada sistem. Jumlah memori yang sebenarnya tersedia untuk aplikasi Anda adalah: (10017 - (9475 - 8531)) = 9073. Apakah ini masuk akal?
vik
Saya pikir Anda salah: baris kedua tidak termasuk cache & buffer dan merupakan utilisasi memori aplikasi yang sebenarnya (dan itulah yang dikatakan tautan Anda ...).
assylias