Metriky služby ukládání obsahu do mezipaměti na Macu
Služba ukládání obsahu do mezipaměti uchovává metrická data v následující složce:
/Knihovna/Application Support/Apple/AssetCache/Metrics.
Metriky se nepřesouvají společně s obsahem mezipaměti, ale zůstávají trvale uložené na tomto místě. Přesunete‑li například mezipaměť z adresáře
/Knihovna/Application Support/Apple/AssetCache/Data
do adresáře
/Volumes/Data/Knihovna/Application Support/Apple/AssetCache/Data,
metriky zůstanou uložené v adresáři
/Knihovna/Application Support/Apple/AssetCache/Metrics
Pokud byla na Macu kdykoli v minulosti použita služba ukládání obsahu do mezipaměti, najdete v této složce soubor s názvem Metrics.db a případně i jeden či více dalších souborů s podobnými názvy. Tyto soubory tvoří databázi ve formátu SQLite, jejíž obsah je možné číst.
Objektový model CoreData s popisem metrik je k dispozici jako entita „Metric“ v souboru /usr/libexec/AssetCache/AssetCache.momd.
Poznámka: Ačkoli zde popisujeme model verze 7, Apple může v budoucích vydáních systému macOS bez upozornění přejít na jiný model nebo použít jiný databázový formát než SQLite. V takovém případě se může stát, že budete muset aktualizovat skripty, které jste si pro shromažďování údajů o ukládání obsahu do mezipaměti nastavili.
Mezipaměť obsahu:
přidává do databáze nový řádek po každé minutě provozu,
v případě nečinnosti nepřidává „nulové“ řádky, ale jednoduše přidání řádku vypustí,
existující řádky nijak nemění,
pravidelně maže řádky starší než 30 dní.
Tip: Interval protokolování můžete nastavit na jinou hodnotu než 60 sekund pomocí pokročilého parametru MetricsInterval
a maximální dobu uchování řádků na jinou hodnotu než 30 dnů změnou pokročilého parametru MetricsMaxAge
.
Každý řádek v databázi se skládá z hodnot následujících sloupců. Všechny objekty s výjimkou objektu creationDate
jsou nepovinné.
Objekt | Popis | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Objem dat, která mezipaměť obsahu ve sledovaném období stáhla, ale nepodařilo se jí je přidat do vlastního úložiště. | ||||||||||
bytesFromCacheToClient | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště klientským zařízením Apple. | ||||||||||
bytesFromCacheToChild | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště podřízeným mezipamětem obsahu. | ||||||||||
bytesFromCacheToPeer | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště partnerským mezipamětem obsahu. | ||||||||||
bytesFromOriginToClient | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla klientským zařízením Apple. | ||||||||||
bytesFromOriginToChild | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
bytesFromOriginToPeer | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla partnerským mezipamětem obsahu. | ||||||||||
bytesFromParentToClient | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla klientským zařízením Apple. | ||||||||||
bytesFromParentToChild | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
bytesFromParentToPeer | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla partnerským mezipamětem obsahu. | ||||||||||
bytesFromPeerToClient | Objem dat, která tato mezipaměť obsahu ve sledovaném období obdržela od partnerských mezipamětí obsahu a poskytla klientským zařízením Apple. | ||||||||||
bytesFromPeerToChild | Objem dat, která tato mezipaměť obsahu ve sledovaném období obdržela od partnerských mezipamětí obsahu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
bytesImportedByHTTP | Objem dat, která tato mezipaměť obsahu ve sledovaném období přijala prostřednictvím protokolu HTTP. | ||||||||||
bytesImportedByXPC | Objem dat, která tato mezipaměť obsahu ve sledovaném období přijala prostřednictvím protokolu XPC. | ||||||||||
bytesPurgedTotal | Objem dat, která tato mezipaměť obsahu ve sledovaném období vymazala ze svého úložiště. Zahrnuje i hodnotu bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Objem dat, která tato mezipaměť obsahu ve sledovaném období vymazala ze svého úložiště dříve než jeden den poté, co je do něj uložila. | ||||||||||
bytesPurgedYoungerThan30Days | Objem dat, která tato mezipaměť obsahu ve sledovaném období vymazala ze svého úložiště dříve než 30 dní poté, co je do něj uložila. Zahrnuje i hodnotu bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Objem dat, která tato mezipaměť obsahu ve sledovaném období vymazala ze svého úložiště dříve než sedm dní poté, co je do něj uložila. Zahrnuje i hodnotu bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Datum získání dat daného metrického objektu. Každá položka metriky popisuje chování mezipaměti obsahu v době, jejíž konec odpovídá hodnotě creationDate. | ||||||||||
importsByHTTP | Počet požadavků na import dat, které tato mezipaměť obsahu ve sledovaném období přijala prostřednictvím protokolu HTTP. | ||||||||||
importsByXPC | Počet požadavků na import dat, které tato mezipaměť obsahu ve sledovaném období přijala prostřednictvím protokolu XPC. | ||||||||||
period | Délka sledovaného období končícího datem creationDate, udávaná v sekundách. | ||||||||||
repliesFromCacheToClient | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště klientským zařízením Apple. | ||||||||||
repliesFromCacheToChild | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště podřízeným mezipamětem obsahu. | ||||||||||
repliesFromCacheToPeer | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště partnerským mezipamětem obsahu. | ||||||||||
repliesFromOriginToClient | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla klientským zařízením Apple. | ||||||||||
repliesFromOriginToChild | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
repliesFromOriginToPeer | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z internetu a poskytla partnerským mezipamětem obsahu. | ||||||||||
repliesFromParentToClient | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla klientským zařízením Apple. | ||||||||||
repliesFromParentToChild | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
repliesFromParentToPeer | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období stáhla z nadřazených mezipamětí obsahu a poskytla partnerským mezipamětem obsahu. | ||||||||||
repliesFromPeerToClient | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období obdržela od partnerských mezipamětí obsahu a poskytla klientským zařízením Apple. | ||||||||||
repliesFromPeerToChild | Počet odpovědí, které tato mezipaměť obsahu ve sledovaném období obdržela od partnerských mezipamětí obsahu a poskytla podřízeným mezipamětem obsahu. | ||||||||||
requestsFromClient | Počet požadavků na stažení dat, které tato mezipaměť obsahu ve sledovaném období obdržela od klientských zařízení Apple. | ||||||||||
requestsFromChild | Počet požadavků na stažení dat, které tato mezipaměť obsahu ve sledovaném období obdržela od podřízených mezipamětí obsahu. | ||||||||||
requestsFromPeer | Počet požadavků na stažení dat, které tato mezipaměť obsahu ve sledovaném období obdržela od partnerských mezipamětí obsahu. | ||||||||||
requestsRejectedForNoSpace | Počet požadavků na stažení dat, které tato mezipaměť obsahu ve sledovaném období odmítla z důvodu přetížení (s kódem odpovědi HTTP 503 – služba není dostupná). |
Seskupování výsledků
Některé z výše uvedených položek může být užitečné seskupit. Níže najdete několik návrhů takových seskupení. Veškerý obsah je založený na celočíselných hodnotách.
Obsah | Seskupené objekty | Popis | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bajty poskytnuté klientům | Součet hodnot bytesFrom*ToClient | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla klientským zařízením Apple. | |||||||||
Bajty poskytnuté partnerským mezipamětem | Součet hodnot bytesFrom*ToPeer | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla kterékoli partnerské mezipaměti obsahu. | |||||||||
Bajty poskytnuté podřízeným mezipamětem | Součet hodnot bytesFrom*ToChild | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla kterékoli podřízené mezipaměti obsahu. | |||||||||
Bajty poskytnuté z nadřazených mezipamětí | Součet hodnot bytesFromParentTo* | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z kterékoli nadřazené mezipaměti obsahu. | |||||||||
Bajty poskytnuté z partnerských mezipamětí | Součet hodnot bytesFromPeerTo* | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z kterékoli partnerské mezipaměti obsahu. | |||||||||
Bajty poskytnuté z vlastního úložiště | Součet hodnot bytesFromCacheTo* | Objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla ze svého úložiště. Čím bližší je tato hodnota hodnotě Poskytnuté bajty, tím efektivněji se mezipaměť obsahu využívá. | |||||||||
Bajty poskytnuté ze zdroje | Součet hodnot bytesFromOriginTo* | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z internetu. | |||||||||
Importované bajty | Součet hodnot bytesImportedBy* | Objem dat, která byla prostřednictvím této mezipaměti obsahu ve sledovaném období odeslána. | |||||||||
Poskytnuté bajty | Celkový objem dat, která tato mezipaměť obsahu ve sledovaném období poskytla. Je‑li tato hodnota nenulová, znamená to, že mezipaměť obsahu pracuje. | Součet hodnot bytesFrom*To* | |||||||||
Stažené bajty | bytesFrom <Origin,Parent,Peer>To | Objem dat, která tato mezipaměť obsahu ve sledovaném období stáhla z internetu nebo od partnerských a nadřazených mezipamětí obsahu. |
Načtení údajů o vytížení mezipaměti
Pro sledované období můžete zjistit, jak naléhavě potřebovala mezipaměť obsahu úložné místo pro nová data. Menší hodnota vytížení je příznivější.
Monitor aktivity vypočítává vytížení mezipaměti takto:
100 %, pokud requestsRejectedForNoSpace > 0
80 %, pokud bytesPurgedYoungerThan1Day > 0
60 %, pokud bytesPurgedYoungerThan7Days > 0
40 %, pokud bytesPurgedYoungerThan30Days > 0
20 %, pokud bytesPurgedTotal > 0
0 % v ostatních případech
Výše uvedené hodnoty monitor aktivity také shrnuje podle následujících pravidel, například při výpočtu hodnot za časový interval delší než jedno období.
Počty bajtů, importů, požadavků a odpovědí za celý časový interval se sčítají.
Vytížení mezipaměti se stanovuje jako maximální hodnota dosažená během časového intervalu.
Ukázka kódu pro načtení dat z databáze metrik
#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
}
}