Mac’te içerikleri önbelleğe alma ölçümleri
İçerikleri Önbelleğe Alma, ölçümleri şu klasörde saklar:
/Library/Application Support/Apple/AssetCache/Metrics.
Ölçümler, önbelleğe alınan içeriklerle taşınmaz; bunun yerine hep bu konumda saklanır. Örneğin şu konumdaki önbelleği:
/Library/Application Support/Apple/AssetCache/Data
şu konuma taşırsanız:
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
ölçümler şu konumda saklanmaya devam eder:
/Library/Application Support/Apple/AssetCache/Metrics
Mac’te İçerikleri Önbelleğe Alma daha önce kullanıldıysa bu klasörde Metrics.db adlı bir dosya vardır ve benzer adlara sahip bir veya birden fazla başka dosya olabilir. Bu dosyalar, okuyabileceğiniz bir SQLite veri tabanını oluşturur.
Ölçümleri açıklayan CoreData nesne modeli /usr/libexec/AssetCache/AssetCache.momd dosyasında bir “Metric” varlığı olarak bulunabilir.
Not: Buradaki açıklama sürüm 7 modeli içindir ancak Apple, bu modeli macOS’in gelecekteki sürümlerinde haber vermeden değiştirebilir (veya SQLite’dan başka bir veri tabanı kullanabilir). Bu, önbelleğe alma içerik verilerini toplamak için ayarladığınız betiklerde güncelleme yapılmasını gerektirebilir.
İçerik önbelleği:
Çalıştığı her dakika veri tabanına yeni bir satır ekler
Boş kaldığında “tümü sıfır” olan satırları eklemez; böyle satırları eklemeyi atlar
Var olan satırları değiştirmez
30 günden eski satırları düzenli aralıklarla siler
İpucu: MetricsInterval
ileri düzey ayarını değiştirerek 60 saniye olan rapor dönemi süresini ve MetricsMaxAge
ileri düzey ayarını değiştirerek 30 gün olan satırların maksimum saklanma süresini değiştirebilirsiniz.
Veri tabanındaki her satır aşağıdaki sütunları içerir. creationDate
dışında tüm nesneler isteğe bağlıdır.
Nesne | Açıklama | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | İçerik önbelleğinin rapor döneminde indirdiği ancak önbelleğine ekleyemediği veri miktarı. | ||||||||||
bytesFromCacheToChild | İçerik önbelleğinin rapor döneminde kendi önbelleğinden alt içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromCacheToClient | İçerik önbelleğinin rapor döneminde kendi önbelleğinden istemci Apple aygıtlarına sunduğu veri miktarı. | ||||||||||
bytesFromCacheToPeer | İçerik önbelleğinin rapor döneminde kendi önbelleğinden eş içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromOriginToChild | İçerik önbelleğinin rapor döneminde internet üzerinden indirip alt içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromOriginToClient | İçerik önbelleğinin rapor döneminde internet üzerinden indirip istemci Apple aygıtlarına sunduğu veri miktarı. | ||||||||||
bytesFromOriginToPeer | İçerik önbelleğinin rapor döneminde internet üzerinden indirip eş içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromParentToChild | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip alt içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromParentToClient | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip istemci Apple aygıtlarına sunduğu veri miktarı. | ||||||||||
bytesFromParentToPeer | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip eş içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromPeerToChild | İçerik önbelleğinin rapor döneminde eş içerik önbelleklerinden alıp alt içerik önbelleklerine sunduğu veri miktarı. | ||||||||||
bytesFromPeerToClient | İçerik önbelleğinin rapor döneminde eş içerik önbelleklerinden alıp istemci Apple aygıtlarına sunduğu veri miktarı. | ||||||||||
bytesImportedByHTTP | İçerik önbelleğinin rapor döneminde HTTP üzerinden aldığı veri miktarı. | ||||||||||
bytesImportedByXPC | İçerik önbelleğinin rapor döneminde XPC üzerinden aldığı veri miktarı. | ||||||||||
bytesPurgedTotal | İçerik önbelleğinin rapor döneminde önbelleğinden sildiği veri miktarı. bytesPurgedYoungerThan30Days’i içerir. | ||||||||||
bytesPurgedYoungerThan1Day | İçerik önbelleğinin bir günden daha kısa süre önce önbelleğine ekleyip rapor döneminde önbelleğinden sildiği veri miktarı. | ||||||||||
bytesPurgedYoungerThan30Days | İçerik önbelleğinin 30 günden daha kısa süre önce önbelleğine ekleyip rapor döneminde önbelleğinden sildiği veri miktarı. bytesPurgedYoungerThan7Days’i içerir. | ||||||||||
bytesPurgedYoungerThan7Days | İçerik önbelleğinin 7 günden daha kısa süre önce önbelleğine ekleyip rapor döneminde önbelleğinden sildiği veri miktarı. bytesPurgedYoungerThan1Day’i içerir. | ||||||||||
creationDate | Bu ölçüm nesnesinin toplandığı tarih. Bu ölçüm öğesi, creationDate tarihinde biten dönemde içerik önbelleğinin performansını açıklar. | ||||||||||
importsByHTTP | İçerik önbelleğinin rapor döneminde HTTP aracılığıyla aldığı karşıya yükleme isteği sayısı. | ||||||||||
importsByXPC | İçerik önbelleğinin rapor döneminde XPC aracılığıyla aldığı karşıya yükleme isteği sayısı. | ||||||||||
period | creationDate tarihinde biten rapor döneminin saniye cinsinden süresi. | ||||||||||
repliesFromCacheToChild | İçerik önbelleğinin rapor döneminde kendi önbelleğinden alt içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromCacheToClient | İçerik önbelleğinin rapor döneminde kendi önbelleğinden istemci Apple aygıtlarına sunduğu yanıt sayısı. | ||||||||||
repliesFromCacheToPeer | İçerik önbelleğinin rapor döneminde kendi önbelleğinden eş içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromOriginToChild | İçerik önbelleğinin rapor döneminde internet üzerinden indirip alt içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromOriginToClient | İçerik önbelleğinin rapor döneminde internet üzerinden indirip istemci Apple aygıtlarına sunduğu yanıt sayısı. | ||||||||||
repliesFromOriginToPeer | İçerik önbelleğinin rapor döneminde internet üzerinden indirip eş içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromParentToChild | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip alt içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromParentToClient | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip istemci Apple aygıtlarına sunduğu yanıt sayısı. | ||||||||||
repliesFromParentToPeer | İçerik önbelleğinin rapor döneminde üst içerik önbelleklerinden indirip eş içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromPeerToChild | İçerik önbelleğinin rapor döneminde eş içerik önbelleklerinden alıp alt içerik önbelleklerine sunduğu yanıt sayısı. | ||||||||||
repliesFromPeerToClient | İçerik önbelleğinin rapor döneminde eş içerik önbelleklerinden alıp istemci Apple aygıtlarına sunduğu yanıt sayısı. | ||||||||||
requestsFromChild | İçerik önbelleğinin rapor döneminde alt içerik önbelleklerinden aldığı indirme isteği sayısı. | ||||||||||
requestsFromClient | İçerik önbelleğinin rapor döneminde istemci Apple aygıtlarından aldığı indirme isteği sayısı. | ||||||||||
requestsFromPeer | İçerik önbelleğinin rapor döneminde eş içerik önbelleklerinden aldığı indirme isteği sayısı. | ||||||||||
requestsRejectedForNoSpace | İçerik önbelleğinin rapor döneminde yüksek önbellek yoğunluğu nedeniyle reddettiği indirme isteği sayısı (HTTP yanıt kodu 503, Servis Yok). |
Grup sonuçları
Yukarıdaki öğelerden bazılarını bir arada gruplamak yararlı olabilir. Aşağıda bazı öneriler verilmiştir. Tüm içerikler tamsayı tabanlıdır.
İçerik | Gruplanan nesneler | Açıklama | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Alt öğeye sunulan bayt | bytesFrom*ToChild toplamı | İçerik önbelleğinin rapor döneminde kendi alt içerik önbelleklerinden herhangi birine sunduğu veri miktarı. | |||||||||
Eş öğeden sunulan bayt | bytesFromPeerTo* toplamı | İçerik önbelleğinin rapor döneminde kendi eş içerik önbelleklerinin herhangi birinden indirdiği veri miktarı. | |||||||||
Eş öğeye sunulan bayt | bytesFrom*ToPeer toplamı | İçerik önbelleğinin rapor döneminde kendi eş içerik önbelleklerinden herhangi birine sunduğu veri miktarı. | |||||||||
İndirilen bayt | bytesFrom <Origin,Parent,Peer>To | İçerik önbelleğinin rapor döneminde internetten veya eşlerden ya da üst öğelerden indirdiği veri miktarı. | |||||||||
İstemciye sunulan bayt | bytesFrom*ToClient toplamı | İçerik önbelleğinin rapor döneminde istemci Apple aygıtlarına sunduğu veri miktarı. | |||||||||
Karşıya yüklenen bayt | bytesImportedBy* toplamı | Rapor döneminde içerik önbelleği aracılığıyla karşıya yüklenen veri miktarı. | |||||||||
Kaynaktan sunulan bayt | bytesFromCacheTo* toplamı | İçerik önbelleğinin rapor döneminde internetten indirdiği veri miktarı. | |||||||||
Önbellekten sunulan bayt | bytesFromCacheTo* toplamı | İçerik önbelleğinin rapor döneminde önbelleğinden sunduğu veri miktarı. Bu değer, sunulan bayt değerine ne kadar yakınsa içerik önbelleği o kadar çok yardımcı olmuştur. | |||||||||
Sunulan bayt | İçerik önbelleğinin rapor döneminde sunduğu toplam veri miktarı. Bu değer sıfır değilse içerik önbelleği çalışıyordur. | bytesFrom*To* toplamı | |||||||||
Üst öğeden sunulan bayt | bytesFromParentTo* toplamı | İçerik önbelleğinin rapor döneminde kendi üst içerik önbelleklerinin herhangi birinden indirdiği veri miktarı. |
Önbellek yoğunluğu verisini alma
İçerik önbelleğinin rapor döneminde ne kadar acil daha fazla disk alanına gereksinim duyduğunu gözden geçirebilirsiniz. Daha düşük önbellek yoğunluğu daha iyidir.
Etkinlik Monitörü, önbellek yoğunluğunu şu şekilde hesaplar:
requestsRejectedForNoSpace > 0 ise %100
bytesPurgedYoungerThan1Day > 0 ise %80
bytesPurgedYoungerThan7Days > 0 ise %60
bytesPurgedYoungerThan30Days > 0 ise %40
bytesPurgedTotal > 0 ise %20
Değilse %0
Etkinlik Monitörü, örneğin bir dönemden daha uzun bir zaman aralığında değerleri hesaplamak için yukarıdaki öğeleri aşağıdaki şekilde düzenler.
Bayt sayıları, içe aktarma sayıları, istek sayıları veya yanıt sayıları için bunların zaman aralığındaki toplamı hesaplanır.
Önbellek yoğunluğu için zaman aralığındaki maksimum hesaplanır.
Ölçüm veri tabanını okumak için örnek kod
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
void readMetricsSinceDate(NSDate *date)
{
NSURL *modelURL = [NSURL fileURLWithPath:@"/usr/libexec/AssetCache/AssetCache.momd"];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
if (model == nil) {
// handle the error
}
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSURL *databaseURL = [NSURL fileURLWithPath:@"/Library/Application Support/Apple/AssetCache/Metrics/Metrics.db"];
NSError *storeError = nil;
NSPersistentStore *store = [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:databaseURL options:@{ NSReadOnlyPersistentStoreOption: @YES } error:&storeError];
if (store == nil) {
// handle the error
}
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.persistentStoreCoordinator = coordinator;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Metric"];
request.predicate = [NSPredicate predicateWithFormat:@"%K > %@", @"creationDate", date];
request.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES] ];
NSError *fetchError = nil;
NSArray *results = [context executeFetchRequest:request error:&fetchError];
if (results == nil) {
// handle the error
}
for (NSManagedObject *result in results) {
NSNumber *bytesDropped = [result valueForKey:@"bytesDropped"];
// ...
NSNumber *requestsRejectedForNoSpace = [result valueForKey:@"requestsRejectedForNoSpace"];
// use the values
}
}