Belirli bir Mac uygulaması ne kadar takas kullanıyor?


15

Mac OSX (10.2+) üzerinde çalışan belirli bir uygulamanın belleğinin bir kısmının yer değiştirip değiştirmediğini (yani /private/var/vm/swapfile*dosyalardan birine) anlamanın herhangi bir yolu var mı ? Ve ne kadar?

Ödül (150 rps)

Basit soru. Ödül döneminin 2 günden daha az sona erme tarihi ile görürsem ilk doğru cevap kabul edilecektir. Eğer hala bir tane yoksa, bana en ilginç yeni gerçeği söyleyen herkese vereceğim. Ve cevapların hiçbirinden tek bir şey öğrenmediysem, ödülü en güzel yazanlara ödüllendireceğim.


Bu çok kötü bir soru. Aradığınız sayı değişecektir çünkü ölçmeye çalışıyorsunuz (Heisenberg belirsizlik ilkesini düşünün). Ayrıca, diğer uygulamalara ve bellek gereksinimlerine, io modellerine ve işlem önceliğine bağlı olarak her zaman değişecektir. Numarayı bulursanız, OS kodunu düzenlemediğiniz sürece size hiçbir faydası olmaz, çünkü değiştirmek için uygulamanın bakış açısından yapacak çok az şey vardır.
gavaletz

3
@gavaletz: Bu sabah yatağın yanlış tarafından mı çıkıyorsun? Linux'un / proc / $ pid / smaps kullanarak mümkün kıldığı bir tür profil oluşturma yapmak istiyorum. Genellikle kulaklarımı kullanarak ani takas aktivitesi patlamaları tanımlayabilirim, bu yüzden gavaletz'in belirsizlik ilkesinden çok rahatsız değilim.
Charles Stewart

Yanıtlar:


13

Ben çok googling ;-) Anladım gibi, verilen bir sürecin sanal bellek işletim sistemi tarafından ele ve RAM gibi uygulama sunulan sayfalara ayrılmıştır .

Mach çekirdeğine dayanan OS X'te bu, denilen bir arka plan programı tarafından ele alınır dynamic_pager. Bu işlem, belirttiğiniz gibi takas dosyalarını oluşturur /private/var/vm. Bu swap dosyaları, uygulama başına değil, "belleğe ihtiyaç" temelinde oluşturulur. Takas dosyaları 4096 baytlık sayfalara bölünür ve sayfalar daha sonra (işletim sistemi tarafından kabul edilen) sanal belleğe ihtiyaç duyan işlemlere ayrılır. Bu nedenle, bir takas dosyasını belirli bir uygulamayla ilişkilendiremezsiniz, ancak belirli bir işlemin kaç sayfa kullandığını görebilirsiniz.

Komutu vm_statTermial'da denemek isteyebilirsiniz. Bu size VM kullanımı istatistiği verir ('sayfa boyutu' etkin sayfa sayısının swap dosyalarınızın boyutuna eşit olduğunu unutmayın). Bu aynı zamanda VM kullanarak neden birden fazla işlem yapabileceğinizi açıklar, ancak yalnızca birkaç swap dosyası olabilir.

Diğer eğlenceli komutlar vmmap [process id]ve pagestuff.


Bu arada, biraz daha fazla bilgi edinmek istiyorsanız developer.apple.com/mac/library/documentation/Darwin/Conceptual/… 'a göz atın .
trolle3000

Bu umut verici görünüyor. Bu, sorunun ilk kısmına kesin bir cevap sağlıyor gibi görünüyor ve ikinci kısma somut bir cevap olduğunu düşündürüyor. Daha fazla kazmaya ihtiyacım var ...
Charles Stewart

Mı değil vmmap [pid]yoksa vmmap -pages [pid]Sorunuzun ikinci kısmı için cevap?
trolle3000

vmmap $ pid, yazılabilir bölgeler olarak neyi sınıflandırdığı hakkında net bilgi verir. Salt okunur bölgeler için tahsis edilen (yani takas edilebilir) ve takas edilen bellek arasında ayrım yapmaz, ancak belki de ayrım çok önemli değildir. Yarın bu cevabı büyük olasılıkla kabul edeceğim.
Charles Stewart

5

vmmap PIDKomut verilen bir süreçle ilgili sayılarda bazı yararlı istatistikleri vermelidir.


even vmmap [AppName] çalışıyor
Studer

4

Burada yayınlanan fikirlere dayanarak bu küçük kod satırını oluşturdum:

sudo vmmap notifyd | grep -A3 'Summary'

vmmap çıkışının Özet bölümünü (3 satır) görüntüler. notifydBu örnekte kullandım , ancak bunu bildiğiniz herhangi bir PID ile değiştirebilirsiniz.

Bu satır, çalışan tüm işlemlerin tüm Özet satırlarını listelemeye çalışacaktır. Açıkçası bazıları başarısız çünkü işlem kimliği zaten gitti (işlem sona erdi), ama genel olarak bu bellek bilgi listesinde kaydırma ve üst takas nokta için harika bir yol buldum.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Düzenlendi: Bazı anonim kullanıcılar bu son komut satırının iyileştirilmesi gerektiğini gördü, çünkü orijinal varyant artık çalışmadı. Bu yüzden kim olduğun için çok teşekkür ederim ve yaptığınız düzenlemenin reddedildiği için üzgünüm. (İlk komut daha önce 'ps xa' yı okudu ve vmmap'in ona atılan ps başlığı nedeniyle başarısız olmasına neden oldu)

Daha da geliştirilmesi: Programın adını hemen bilmek istiyorsanız bu küçük değişikliği kullanın

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

Bu komutun diğer ucundaki küçük bir değişiklik, belirli program adlarını veya komut satırı yolu bileşenlerini filtrelemenizi sağlar. Burada sadece Kütüphane / PrivateFrameworks'teki tüm süreçlere bakıyoruz.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

Vmmap'in 32 değil, xargs'ı durduran bir süreç olarak başlatılamayacağını söyleyen birçok hata alıyorum. Kartların devam etmesini sağlamak için yaptım ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Hala ctrl + c'de durmaz, ancak vmmap hatalarında da durmaz.
ShadSterling

0

/ Applications / Utilities klasörünüzde Etkinlik İzleyicisi'ni açın, bunu anlatacak bir Sanal Bellek sütunu vardır. Uygulama tarafından en çok veya en az kullanılana göre sıralamak için Sanal Bellek başlığına tıklayabilirsiniz. Ayrıca İşlemlerimi Tüm İşlemler olarak değiştirdiğinizden ve bir uygulamanın birden çok işlemi olabileceğinin farkında olun. Örneğin, üçüncü taraf uygulaması Little Snitch "Little Snitch Network Monitor" ve "Little Snitch UIAgent" dan oluşur.


4
Bu yanlış. Sanal bellek sütununda nubmer şu anda RAM ve takas dosyaları mmaped bellek toplamıdır ve başka ne bilmiyorum.
Tadeusz A. Kadłubowski

Emin misiniz? Apple bundan bahsetmiyor support.apple.com/kb/TA20517
ridogi

1
VM numarası, tahsis edilen ancak henüz kullanılmayan miktarı ölçer. Takas dosyaları gerçekte kullanılana sahip olacaktır.
Chealion

@Chealion: Tahsis edilen ancak gerçekte kullanılmayan belleği nasıl tanımlarsınız?
Tadeusz A. Kadłubowski

@tkadlubo: Bu durumda, benim inancım, işlem için belirtilen sanal makine boyutu ile gerçek sayfalar arasında belirtilen disk boyutu arasındaki farkın diske yerleştirilmiş olmasıdır. VM numarasının ve diskteki takas dosyalarının farklı olduğuna dikkat çekmeden nasıl tanımlanacağından emin değilim.
Chealion

0

Ridogi'nin dediği gibi Etkinlik Monitörü'nü açın. İncelemek istediğiniz işleme gidin ve ... İncele! Sonra belleği tıklayın; bu size verilen işlemin ne kadar takas kullandığını gösterecektir.

İyi eğlenceler!


3
İnceleme sayfası bana #pagefaults, #pageins ve mmapped dosyalarının listesi gibi sorunun cevabı ile olumlu bir şekilde ilişkilendirilmiş her türlü ilginç şeyi söylüyor, ancak peşinde olduğum sorunun asıl cevabı yok.
Charles Stewart
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.