Linux'ta bellek kullanımı nasıl raporlanır?


17

Ps kullanarak, boyutu, vsize (üst VIRT ile aynı?) Ve rss (üst RES ile aynı?) Görebilirsiniz. (En üstte gördüğüm bir tane daha SHR.)

Birisi benim için bu farklı alanların ne anlama geldiğini özetleyebilir mi?


Bu sayfada kaybolabilecek bir bağlantıdan ziyade bu sayfanın referans olarak yaşayabilmesi için güzel bir özet görmeyi tercih ederim.
Jim Hunziker

Yanıtlar:


34

Kısacası:

  • Sanal boyut: bir işlemin yönettiği adres alanı miktarıdır. Sanal adres alanı, işlemin işaretçilerle erişebileceği her şeyi içerir (bellek adresi referansları). Örneğin, programınız video kartınızın çerçeve arabelleğine erişirse, bu bellek işlem sanal alanına eşlenir ve bir işaretçiye depolanan bir adres alır. Bellek eşlemeli dosyalar ve anonim eşlemeler de sanal adres alanı boyutunda hesaba katılır. Hemen hemen her şey sanal boyuttadır. Listelenen tüm adres aralıklarının boyutunu /proc/<pid>/mapstoplarsanız, size sanal boyutun kabaca aynı değerini döndürmelidir.

  • Yerleşik boyut: özel olarak o anda bellekte yerleşik olan işleme ait olan bellek miktarıdır. Bu, takasta olmayan bellek miktarı anlamına gelir. İşlemin bazı bölümlerinin işlem çalışırken bile takas belleğinde olabileceğini unutmayın. İşlem erişmeye çalıştığında işletim sistemi bu bölgeleri takastan alır. Bu, yığını, tüm iş parçacıklarının yığınlarını ve diğer özel eşlemeleri içermelidir. Eğer bakarsanız /proc/<pid>/maps, [stack], [heap]ve diğer anonim eşleştirmeleri (dosya yolları olmayanlar) ya takas veya ikamet boyutunda muhasebeleştirilir.

  • Paylaşılan boyut: birden çok işleme ait olabilecek bellek miktarıdır. Örneğin, aynı uygulamanın bellekte yüklü dört örneğine sahipseniz, dört işlem yığınına ve her işlem için bir tane olmak üzere en az dört yığına sahip olacaksınız (bu yerleşik bellektir), ancak yalnızca bir örneğiniz olacaktır. programın ve kütüphanelerinin ikili kodu. Bu paylaşılan alan. Yalnızca program ikili kodunu ve kitaplıklarını değil, aynı zamanda yerelleştirme dosyalarını, salt okunur program verilerini, SysV ve POSIX paylaşılan bellek segmentlerini, semaforları vb. İçerir ... Eğer bakarsanız /proc/<pid>/maps, kitaplık ve program dosyalarına bağlı çoğu eşleme paylaştı.

VIRT'nin RSS ve SHR birliğini içerdiğini ve her zaman bunlardan daha büyük olacağını unutmayın. Hem RSS hem de SHR olarak hesaplanan bölgeler olabilir.


2
Bu arada, linux'un son sürümlerinde / proc / <pid> / smaps
bdonlan'da

1
Paylaşılan boyut hafızadır olabilir paylaşılacak. Bir uygulama tek kütüphane kullanıcısıysa, kütüphane tek bir işlemle hafızada tutulur. Bu şekilde paylaşılan bellek bile "işleme ait" bellek olabilir.
Hubert Kario

6

Juliano cevabında:

RSS + SHR <= VIRT, daima.

Bu sadece yanlış. SHR, diğer işlemlerle paylaşılabilen tüm sanal belleği içerir ve RSS, işlem tarafından kullanılan RAM'de fiziksel olarak tüm belleği içerir.

Bu nedenle, RAM'de şu anda paylaşılan tüm bellek hem SHR'de hem de RSS'de sayılır, bu nedenle SHR + RSS'nin yinelenen sayımlar içerebileceği için bir anlamı yoktur.

RSS + SHR> VIRT ile bir işlem oluşturmak için, büyük bir dosyayı (1GB) mmap edin, sonra tamamen okuyun: mmaped dosyası RAM'e yüklenecek ve VIRT, SHR ve RSS'nin her biri 1GB'den büyük olacak, bu yüzden SHR + RSS> VIRT.


Evet, VIRT hakkında diğer ikisinden daha çok bir ifadeydi. Aklımda RSS ve SHR birliği, toplamlarından daha fazlaydı, yani VIRT hem RSS hem de SHR'yi içeriyor. Kötü matematiksel gösterim.
Juliano
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.