Bir işlemin bellek kullanımı hakkında / proc / pid / smaps adresinden bilgi alma


46

Verilen bir işlem /proc/<pid>/smapsiçin, verilen bir haritalama girişi için:

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

Shared_Clean+ Shared_DirtyDiğer işlemlerle paylaşılan hafıza miktarı mı ? Yani paylaşılan RSS gibi mi?

Benzer şekilde Private_Clean+ sadece bir işlem için mevcutPrivate_Dirty olan hafıza miktarı ? Yani özel RSS gibi mi?

PSS değeri = PrivateRSS + (PaylaşılanRSS / paylaşılan işlem sayısı)?

Bu linki okuduktan sonra birkaç soru: LWN

Şimdi smaps girişine baktığımız süreç hakkında bir bütün olarak konuşalım.

Ben fark ben yaparsam Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyher ı tarafından bildirilen sürecinin RSS olsun süreci için giriş smaps için pshoş serin olan. Örneğin

ps -p $$ -o pid,rss

Her toplamı olarak bana rss için (yaklaşık) aynı değeri verecektir Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtygiriş / proc / $$ / smaps.

Peki ya tüm süreç için PSS ? Peki yukarıdaki örnekten PSS'yi $$ için nasıl alabilirim? Her smaps eşlemesi için PSS girişini ekleyebilir ve $$ için PSS'e ulaşabilir miyim?

Peki ya tüm süreç için USS ? Yine yukarıdaki örneği ele alarak, $$ için USS'ye ulaşabileceğimi tahmin ediyorum. $$ için her smaps girişi için sadece Private_ * girişlerini topladım.

Notlar:
PSS = Oransal set büyüklüğü.
USS = Benzersiz ayarlanmış boyut.

Yanıtlar:


50

Temiz sayfalar, eşlendiklerinden beri değiştirilmemiş sayfalardır (genellikle paylaşılan kitaplıklardan metin bölümleri yalnızca diskten okunur (gerektiğinde), asla değiştirilmez, bu nedenle paylaşılan, temiz sayfalarda olurlar).
Kirli sayfalar temiz olmayan sayfalardır (yani değiştirilmiş).

Özel sayfalar yalnızca bu işlem için kullanılabilir, paylaşılan sayfalar diğer işlemler tarafından eşlenir * .

RSS, şu anda sürece eşlenmiş olan veya paylaşılmayan toplam sayfa sayısıdır. Yani Shared_Clean+ Shared_Dirty, RSS’nin paylaşılan kısmı (diğer bir deyişle RSS’in başka işlemlerle eşleştirilen kısmı) ve Private_Clean+’ Private_Dirtynın özel kısmı (yani bu süreçte eşlenmiş) olacaktır.

PSS (oransal hisse büyüklüğü) tarif ettiğiniz gibidir. Özel sayfalar olduğu gibi toplanır ve paylaşılan her eşlemenin boyutu, onu paylaşan işlem sayısına bölünür.
Dolayısıyla bir işlem 100 k özel sayfa, 500 k sayfa başka bir işlemle paylaşıldı ve 500 k diğer dört işlemle paylaşıldıysa, PSS şöyle olacaktır:

100k + (500k / 2) + (500k / 5) = 450k

Diğer okumalar:

Süreç çapında meblağlar hakkında:

  • RSSgirişleri toplayarak elde edilen (yaklaşık + ) olabilir ( paylaşılan / özel paylaşılan / kirli girişleri eklemeniz gerekmez).Rss:smaps

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Pss:İşlemi global yapmak için değerleri aynı şekilde toplayabilirsiniz PSS.
  • USSrapor edilmedi smaps, ama gerçekten, bu özel haritalamaların toplamıdır, yani aynı şekilde de elde edebilirsiniz.

* "Paylaşılabilir" bir sayfanın gerçekten paylaşılana kadar özel bir harita olarak sayıldığını unutmayın . Örneğin, şu anda kullanan tek bir işlem varsa libfoo, o kütüphanenin metin bölümü işlemin özel haritalarında görünecektir . Paylaşılan eşlemelerde (ve özel olanlardan kaldırılmış olarak) yalnızca başka bir işlem bu kütüphaneyi kullanmaya başladığında / uygulandığında muhasebeleştirilir.
+ Değerler tüm işlemler için tam olarak toplanmaz. Tam olarak neden bilmiyorum ... özür dilerim.


Harika cevap için teşekkürler. Takdir et. LWM makalesini okudum ve bu bana birkaç soru sormam için ilham verdi, bu yüzden yukarıdaki soruma ekledim.
Ankur Agarwal

Harika! çok çok yardımcı oldu!
camino

Hala paylaşılan_dirty hakkında kafam karıştı - bunun hala paylaşılmasını engelleyen kirli yapısı mı?
Kevin,

@Kevin: Paylaşılmamışlarsa hesaba katılmazlar Shared_Dirty- sorunuzu netleştirebilir misiniz?
Mat,

Orijinalden değiştirilmiş kirli araçlar. süreç değil mi? Hangi paylaşılmadan yerel olmaktan geçmiyor?
Kevin
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.