Kullanım
spindump [pid | partial-name [duration [interval]]] [<options>]
Açıklama
spindump, yanıt vermeyen bir uygulama zorla kapatıldığında (force quit) rapor oluşturmak için çeşitli sistem bileşenleri tarafından kullanılır. Raporlar şu konumda saklanır:
/Library/Logs/DiagnosticReports/
Normal uygulama zorla kapatma işlemlerinde, spindump daha fazla detay görüntüleme ve/veya Apple'a rapor gönderme seçeneği sunan bir iletişim kutusu görüntüleyecektir.
Manuel olarak çalıştırıldığında, spindump sistemdeki her işlem için kullanıcı ve çekirdek çağrı yığınlarını (callstack) örnekler. Spindump, çağrı yığınları için "heavy" (yoğun) ve "timeline" (zaman çizelgesi) olmak üzere iki görüntüleme biçimini destekler ve farklı seçeneklerle yeniden raporlama yapabilmek için raporların sonunda verilerinin ikili (binary) bir gösterimini içerir (bkz. -i). Spindump ayrıca, bunları "heavy" biçiminde yeniden raporlamak için ikili gösterim olmasa bile "timeline" biçimindeki raporları ayrıştırabilir.
"heavy" biçiminde görüntülendiğinde, çağrı yığınları sayıya göre sıralanır ve her benzersiz çağrı yığını bir kez görüntülenir. Bu kesitte:
84 __CFRunLoopRun + 1161 (CoreFoundation + 460665) [0x7fff8d662779]
0x7fff8d662779 adresi, ardışık olması gerekmeden toplamda 84 kez örneklenmiştir. Adres, CoreFoundation içindeki __CFRunLoopRun fonksiyonuna karşılık gelir.
"timeline" biçiminde görüntülendiğinde, çağrı yığınları, çağrı ağacındaki yaprak çerçeveler (leaf frames) kronolojik sırada sunulacak şekilde sıralanır. Her çerçeve, çerçevenin görüldüğü ardışık çağrı yığınlarının bir zaman aralığını içerir; bu aralık eşzamanlılığı belirlemek için diğer çerçevelerin aralığıyla karşılaştırılabilir. Aynı çağrı yığınının birden fazla örneği ardışık değilse, çağrı yığını birden fazla kez görüntülenecektir. Bu kesitte:
23 __CFRunLoopRun + 1161 (CoreFoundation + 460665) [0x7fff8d662779] 50-72
0x7fff8d662779 adresi, 50. örnekten 72. örneğe kadar ardışık olarak 23 kez örneklenmiştir.
"timeline" biçiminde, spindump iş parçacıkları (threads) için durum değişikliklerini kaydeder, örneğin:
<darwinbg, timers coalesced>
bu, sonraki örnekler için durum değişikliğini gösterir. Bahsedilmeyen herhangi bir durum, önceki örneklerle aynı kalır. spindump'ın raporladığı durum bilgileri şunları içerir: thread QoS (iş parçacığı hizmet kalitesi), darwinbg, önem aktarımı artışı (importance inheritance boost), App Nap için gizleme (suppression), gecikme QoS (zamanlayıcılar), G/Ç (I/O) azaltma katmanı ve işlemci (CPU) önceliği.
Yaprak çerçeveler, iş parçacığının çalışıyor/çalıştırılabilir durumda mı yoksa askıya alınmış mı olduğunu belirtecektir.
Başta bulunan bir yıldız (*), bir çekirdek çerçevesini (kernel frame) veya kitaplığını belirtir.
Argümanlar
pid veya partial-name raporda en üstte sıralanacak işlem. Bir süre (duration) ve aralık (interval) belirtirken bir hedef işlem sağlamaktan kaçınmak için "-notarget" kullanılabilir.
duration saniye cinsinden örnekleme süresi. Belirtilmezse, varsayılan olarak 10 saniye kullanılır. interval örnekler arasındaki milisaniye sayısı. Belirtilmezse, varsayılan olarak 10 milisaniye kullanılır.
-i path Canlı sistemi örneklemek yerine path konumunda bulunan dosyayı okur. Desteklenen dosya biçimleri şunlardır:
- Bir spindump ikili (binary) biçimi içeren spindump metin dosyaları
- "timeline" modunda yazılmış, spindump ikili biçimi içermeyen spindump metin dosyaları (sınırlı seçeneklerle ve yalnızca çağrı yığınları güncellenir; özet bilgileri değişmez)
- Tailspin dosyaları
- Birleştirilmiş kcdata yığın görüntüleri (stackshots)
- Birleştirilmiş mikro yığın görüntüleri (microstackshots)
-o path Raporun nereye yazılacağını belirtir. Eğer path bir dosya ise, üzerine yazılacaktır. Eğer path bir dizin ise, o dizinin içinde <uygulama_adı>_
-indexRange s-e Yalnızca verilen aralıktaki örnekleri dahil et
-startIndex s s numaralı örnekten önceki çerçeveleri atla
-endIndex e e numaralı örnekten sonraki çerçeveleri atla
-heavy Çağrı yığınlarını sayıya göre sırala (varsayılan)
-timeline Çağrı yığınlarını kronolojik olarak sırala
-wait Örneklemeden önce işlemin var olmasını bekle. İşlem zaten mevcutsa, spindump örneklemeye hemen başlayacaktır.
-onlyRunnable Yalnızca çalıştırılabilir çağrı yığınlarını görüntüle
-onlyBlocked Yalnızca çalıştırılamaz çağrı yığınlarını görüntüle
-onlyTarget Yalnızca hedef işlemi örnekle (daha hızlı örnekleme oranlarına izin verir)
-proc proc Eğer -onlyTarget belirtilmişse, proc işlemini de örnekle. Bu seçenek birden fazla kez belirtilebilir
-sampleWithoutTarget Hedef işlem sonlansa bile tüm örnekleme süresi boyunca örneklemeye devam et
-timelimit t Rapor kaydedilmemiş olsa bile t saniye sonra çık
-stdout Raporu (bir dosyaya yazmanın yanı sıra) standart çıktıya (stdout) yazdır
-noFile Bir dosyaya çıktı verme. -stdout seçeneğini gerektirir ve standart çıktı çıktısına ikili (binary) biçimi dahil eder
-noBinary Raporun altına spindump ikili (binary) biçimini dahil etme (dosya yeniden ayrıştırılamayacaktır)
-noText Metinsel raporu dahil etme, yalnızca ikili (binary) biçimi dahil et
-open appname Elde edilen raporun açılacağı uygulamayı belirtir
-reveal Elde edilen raporu Finder'da göster
-siginfo Örneklemeden sonra, raporu oluşturmadan önce SIGINFO sinyalini bekle
-delayonsignal d Örneklemeyi durdurma sinyali aldıktan sonra hemen durmak yerine d saniye sonra örneklemeyi durdur
-threadprioritythreshold t Önceliği verilen eşiğin altında olan tüm iş parçacıklarını filtrele. Önceliği verilen eşiğin mutlak değerinin üzerinde olan iş parçacıklarını filtrelemek için negatif bir sayı geçin
-nothrottle Aşırı bellek büyümesinde örnekleme oranını sınırlama (throttle etme)
-noProcessingWhileSampling Örnekleme tamamlanana kadar yığın görüntülerini (stackshots) ayrıştırma
-displayIdleWorkQueueThreads Boştaki iş kuyruğu iş parçacıklarını (idle work queue threads) metinsel raporda görüntüle (varsayılan olarak bunlar atlanır)
-aggregateCallTreesByThread Çağrı ağaçlarını sevk kuyruğuna (dispatch queue) göre değil, iş parçacığı kimliğine (thread ID) göre gruplandır
-aggregateCallTreesByProcess Her işlem, tüm iş parçacıkları için tek bir çağrı ağacı alır
-omitFramesBelowSampleCount c Sayısı c'nin altında olan çerçeveleri atla
Mikro Yığın Görüntüleri
Mikro yığın görüntüleri (microstackshots), bir seferde tek bir iş parçacığının son derece hafif bir şekilde örneklenmesini sağlamak için çekirdek (kernel) tarafından toplanır. Bunlar, microstackshot komut satırı seçenekleri aracılığıyla spindump içinde görüntülenebilir:
-microstackshots İşlemci (CPU) zamanının nerede harcandığının bir örneklemesini sağlayan kesme (interrupt) mikro yığın görüntülerini raporla. -microstackshots_io sağlanmadığı takdirde bu varsayılan moddur
-microstackshots_io Dosya destekli belleğin nerede kirletildiğinin (dirtied) bir örneklemesini sağlayan G/Ç (I/O) mikro yığın görüntülerini raporla
-microstackshots_datastore path Mikro yığın görüntülerini raporlarken, canlı sistemin mikro yığın görüntülerini kullanmak yerine bu konumdan oku. -microstackshots_save ile kaydederken bu konuma yaz
-microstackshots_save Metinsel bir rapor oluşturmak yerine canlı sistemdeki mikro yığın görüntüsünü -microstackshots_datastore tarafından belirtilen yola kaydet
-microstackshots_starttime date Yalnızca bu zamandan sonraki mikro yığın görüntülerini raporla. Tarih, "11/14/12 12:00am" gibi bir dize veya saniye cinsinden Unix zaman damgasını temsil eden tek bir sayı olabilir
-microstackshots_endtime date Yalnızca bu zamandan önceki mikro yığın görüntülerini raporla. Tarih, "11/14/12 12:00am" gibi bir dize veya saniye cinsinden Unix zaman damgasını temsil eden tek bir sayı olabilir
-microstackshots_pid pid Yalnızca verilen işlem kimliği (PID) için mikro yığın görüntülerini raporla
-microstackshots_threadid thread_id Yalnızca verilen iş parçacığı kimliği (thread ID) için mikro yığın görüntülerini raporla
-microstackshots_dsc_path path dyld paylaşılan önbellek (dyld shared cache) düzen dosyalarını içeren bir dizinin yolu. Belirtilmezse, spindump geçerli makine için geçmiş bilgileri kullanır
-batteryonly Yalnızca makine pil gücüyle çalışırken alınan mikro yığın görüntülerini dahil et
-aconly Yalnızca makine alternatif akım (AC) gücüyle çalışırken alınan mikro yığın görüntülerini dahil et
-useridleonly Yalnızca kullanıcı boştayken alınan mikro yığın görüntülerini dahil et
-useractiveonly Yalnızca kullanıcı etkinken alınan mikro yığın görüntülerini dahil et
Ayrıca Bkz.
SubmitDiagInfo(8), sample(1)