Ubuntu Linux: Takas belleği ve bellek kullanımını işleme


14

Ubuntu'm görev yöneticisinin gösterdiklerinden daha fazla bellek yiyor:

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

Bu garip. Birisi bu farkı açıklayabilir mi?

Ama daha da önemlisi: Bir sürecin gerçekten ne kadar bellek kullandığını bilmek istiyorum. Sanal bellek boyutunu bilmek istemiyorum, daha ziyade yerleşik bellek artı bir işlemin takası.

Ben de 'ps' biçiminde param "sz" çıktı denedim, ama bunun toplamı yüksek (16000 MB) (param 'boyutu' 36700 MB verir). Başka seçenek var mı?

Bunu gerçekten kullanmak istiyorum, hangi programları / süreçleri çok fazla belleğe (ve takas) yiyor, onları öldürmek için, çünkü bellek değerli :-) Bu gerçekten mantıklı değil, bu yüzden burada soruyorum.

/ Proc / meminfo çıktısı:

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

Şunu belirtmeliyim ki, "1043.84", "1178" den çok uzak değildir; bu, yaptığınız hesaplamayla elde edeceğiniz sayıdır.
cjc

Kelimenin tam anlamıyla unix.stackexchange (+1) ile aynı soru vardı. Patrick de aklımı orada patlattı: P-- unix.stackexchange.com/questions/34795/…
GoldenNewby

Yanıtlar:


10

Linux sanal bellek sistemi o kadar basit değil. Sadece tüm RSS alanları toplayın ve değer bildirildi alamayan usedtarafından free. Bunun için birçok neden var, ama en büyüklerinden birkaçına vuracağım.

  • Bir işlem çatallandığında, hem ebeveyn hem de çocuk aynı RSS ile gösterilir. Ancak linux copy-on-write, her iki işlemin de gerçekten aynı belleği kullanmasını sağlar. Yalnızca işlemlerden biri belleği değiştirdiğinde gerçekte çoğaltılır. Bu, freesayının topRSS toplamından daha küçük olmasına neden olur .

  • RSS değeri paylaşılan bellek içermiyor. Paylaşılan bellek herhangi bir işleme ait topolmadığından, RSS'ye dahil etmez. Bu, freesayının topRSS toplamından daha büyük olmasına neden olur .


Ohh, teşekkürler! Her zaman düşündüm ki, free -m tüm sistemin gerçek paylaşılan bellek toplamını gösterir. Ancak "man ps" 'in işaret ettiği gibi: "Paylaşılan bellek sütunu göz ardı edilmelidir; kullanılmıyor."
David Halter

Üzgünüm, bu cevabı kabul edemem, çünkü takas sorununa cevap vermiyor, ama yine de teşekkürler!
David Halter

@DavidHalter takas sorunu nedir? Verdiğim bilgiler, takas dahil tüm bellekler için geçerlidir.
Patrick

normalde paylaşılan bellek gerçekten büyük değil mi? En azından görev yöneticisinde gördüm. Ama takasım oldukça yoğun bir şekilde kullanılıyor: 1035 MB; PS toplamı 1 GB ve takas + rss toplamı> 2 GB'dir. Bir işlemin gerçekten ne kadar bellek kullandığını görmek istiyorum, sadece rss değil. Daha da fazla müdahale, bir işlemin bellek miktarını ne kadar değiştireceğidir.
David Halter

1
@DavidHalter Bir işlemin ne kadar bellek kullandığını (paylaşılan dahil) görmek istiyorsanız, 'VSZ' sütununa bakın.
Patrick

1

Toplam bellek kullanımınıza gelince "ücretsiz" çıktısına güvenmekten ve tek bir işlemin ne kadar bellek kullandığına dair genel bir fikir için "ps" ye güvenmekten daha iyi olduğunu düşünüyorum.

"Ps" RSS değerlerinin toplamı "ücretsiz" e eşit olmadığı için, süreçlerinizi RSS'ye göre sıralamanıza ve en büyükleri öldürmek için değerlendirmenize engel olmaz.

Bununla birlikte, tüm çabanız yalnızca makinenin hazırda bekletilmesini sağlayabiliyorsa, daha fazla takas oluşturmak (gerekirse diskteki bir dosya şeklinde) muhtemelen daha kolay bir yoldur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.