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?
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?
Yanıtlar:
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>/maps
toplarsanı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.
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.