Metrika ukladania obsahu do medzipamäte na Macu
Ukladanie obsahu do medzipamäte zapisuje metriku v tomto priečinku:
/Library/Application Support/Apple/AssetCache/Metrics.
Tieto metriky sa nepresúvajú spolu s obsahom medzipamätí – vždy sú uložené v tomto umiestnení. Ak napríklad presuniete medzipamäť z adresára:
/Library/Application Support/Apple/AssetCache/Data
do adresára:
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
metriky zostanú uložené v adresári:
/Library/Application Support/Apple/AssetCache/Metrics
Ak sa niekedy na Macu použilo ukladanie obsahu do medzipamäte, tento priečinok obsahuje súbor s názvom Metrics.db a môže takisto obsahovať jeden alebo viac ďalších súborov s podobnými názvami. Tieto súbory tvoria databázu SQLite, ktorú je možné čítať.
Objektový model CoreData, ktorý opisuje metriky, je dostupný ako entita „Metric“ v súbore /usr/libexec/AssetCache/AssetCache.momd.
Poznámka: Aj keď v tomto dokumente je uvedený opis modelu verzie 7, spoločnosť Apple môže v budúcich vydaniach systému macOS tento model zmeniť alebo používať inú databázu ako SQLite bez toho, aby na to vopred upozornila. Môže to vyžadovať aktualizácie všetkých skriptov, ktoré ste nakonfigurovali na agregáciu dát ukladania obsahu do medzipamäte.
Obsahová medzipamäť:
pridáva počas behu do databázy každú minútu nový riadok,
pri nečinnosti nepridáva riadky „so samými nulami“, ale preskočí pridávanie takýchto riadkov,
neupravuje existujúce riadky,
pravidelne vymazáva riadky, ktoré sú staršie ako 30 dní.
Tip: Čas hlásenia môžete zo 60 sekúnd zmeniť tak, že zmeníte rozšírené nastavenie MetricsInterval
. Ak chcete zmeniť maximálny vek uložených riadkov z 30 dní, zmeňte rozšírené nastavenie MetricsMaxAge
.
Každý riadok v databáze obsahuje nasledujúce stĺpce. Každý objekt je voliteľný okrem objektu creationDate
.
Objekt | Popis | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Množstvo dát, ktoré obsahová medzipamäť stiahla počas obdobia hlásenia, ale nepridala do svojej medzipamäte. | ||||||||||
bytesFromCacheToClient | Množstvo dát, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
bytesFromCacheToChild | Množstvo dát, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromCacheToPeer | Množstvo dát, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromOriginToClient | Množstvo dát, ktoré obsahová medzipamäť stiahla cez internet a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
bytesFromOriginToChild | Množstvo dát, ktoré obsahová medzipamäť stiahla cez internet a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromOriginToPeer | Množstvo dát, ktoré obsahová medzipamäť stiahla cez internet a odoslala partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromParentToClient | Množstvo dát, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
bytesFromParentToChild | Množstvo dát, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromParentToPeer | Množstvo dát, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesFromPeerToClient | Množstvo dát, ktoré obsahová medzipamäť prijala z partnerským obsahových pamätí a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
bytesFromPeerToChild | Množstvo dát, ktoré obsahová medzipamäť prijala z partnerským obsahových pamätí a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
bytesImportedByHTTP | Množstvo dát, ktoré obsahová medzipamäť prijala cez HTTP počas obdobia hlásenia. | ||||||||||
bytesImportedByXPC | Množstvo dát, ktoré obsahová medzipamäť prijala cez XPC počas obdobia hlásenia. | ||||||||||
bytesPurgedTotal | Množstvo dát, ktoré obsahová medzipamäť odstránila zo svojej medzipamäte počas obdobia hlásenia. Zahŕňa objekt bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Množstvo dát, ktoré obsahová medzipamäť odstránila zo svojej medzipamäte počas obdobia hlásenia a ktoré do nej pridala pred menej ako 1 dňom. | ||||||||||
bytesPurgedYoungerThan30Days | Množstvo dát, ktoré obsahová medzipamäť odstránila zo svojej medzipamäte počas obdobia hlásenia a ktoré do nej pridala pred menej ako 30 dňami. Zahŕňa objekt bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Množstvo dát, ktoré obsahová medzipamäť odstránila zo svojej medzipamäte počas obdobia hlásenia a ktoré do nej pridala pred menej ako 7 dňami. Zahŕňa objekt bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Dátum, kedy bol daný objekt metriky zhromaždený. Táto položka metriky opisuje výkon obsahovej medzipamäte počas obdobia končiaceho sa dátumom určeným objektom creationDate. | ||||||||||
importsByHTTP | Počet žiadostí o odoslanie, ktoré obsahová medzipamäť prijala cez HTTP počas obdobia hlásenia. | ||||||||||
importsByXPC | Počet žiadostí o odoslanie, ktoré obsahová medzipamäť prijala cez XPC počas obdobia hlásenia. | ||||||||||
period | Obdobie hlásenia v sekundách, ktoré sa končí dátumom určeným objektom creationDate. | ||||||||||
repliesFromCacheToClient | Počet odpovedí, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
repliesFromCacheToChild | Počet odpovedí, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromCacheToPeer | Počet odpovedí, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromOriginToClient | Počet odpovedí, ktoré obsahová medzipamäť stiahla cez internet a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
repliesFromOriginToChild | Počet odpovedí, ktoré obsahová medzipamäť stiahla cez internet a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromOriginToPeer | Počet odpovedí, ktoré obsahová medzipamäť stiahla cez internet a odoslala partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromParentToClient | Počet odpovedí, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
repliesFromParentToChild | Počet odpovedí, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromParentToPeer | Počet odpovedí, ktoré obsahová medzipamäť stiahla z nadradených obsahových pamätí a odoslala partnerským obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
repliesFromPeerToClient | Počet odpovedí, ktoré obsahová medzipamäť prijala z partnerským obsahových pamätí a odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | ||||||||||
repliesFromPeerToChild | Počet odpovedí, ktoré obsahová medzipamäť prijala z partnerským obsahových pamätí a odoslala podradeným obsahovým medzipamätiam počas obdobia hlásenia. | ||||||||||
requestsFromClient | Počet žiadostí o stiahnutie, ktoré obsahová medzipamäť prijala z klientskych Apple zariadení počas obdobia hlásenia. | ||||||||||
requestsFromChild | Počet žiadostí o stiahnutie, ktoré obsahová medzipamäť prijala z podradených obsahových medzipamätí počas obdobia hlásenia. | ||||||||||
requestsFromPeer | Počet žiadostí o stiahnutie, ktoré obsahová medzipamäť prijala z partnerských obsahových medzipamätí počas obdobia hlásenia. | ||||||||||
requestsRejectedForNoSpace | Počet žiadostí o stiahnutie, ktoré obsahová medzipamäť zamietla počas obdobia hlásenia v dôsledku vysokého zaťaženia medzipamäte (s kódom odpovede HTTP 503, Service Unavailable). |
Zoskupenie výsledkov
Niektoré z vyššie uvedených položiek môže byť vhodné zoskupiť. Tu je niekoľko návrhov. Všetok obsah používa celé čísla.
Obsah | Zoskupené objekty | Popis | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bajty odoslané klientom | Súčet bytesFrom*ToClient | Množstvo dát, ktoré obsahová medzipamäť odoslala klientskym Apple zariadeniam počas obdobia hlásenia. | |||||||||
Bajty odoslané partnerom | Súčet bytesFrom*ToPeer | Množstvo dát, ktoré obsahová medzipamäť odoslala ľubovoľným partnerským obsahovým medzipamätiam počas obdobia hlásenia. | |||||||||
Bajty odoslané podradeným | Súčet bytesFrom*ToChild | Množstvo dát, ktoré obsahová medzipamäť odoslala ľubovoľným podradeným obsahovým medzipamätiam počas obdobia hlásenia. | |||||||||
Bajty odoslané z medzipamäte | Súčet bytesFromCacheTo* | Množstvo dát, ktoré obsahová medzipamäť odoslala zo svojej medzipamäte počas obdobia hlásenia. Čím je táto hodnota bližšie k hodnote Odoslané bajty, tým užitočnejšia bola obsahová medzipamäť. | |||||||||
Bajty odoslané z nadradených | Súčet bytesFromParentTo* | Množstvo dát, ktoré obsahová medzipamäť stiahla z ľubovoľnej z nadradených obsahových medzipamätí počas obdobia hlásenia. | |||||||||
Bajty odoslané z partnerov | Súčet bytesFromPeerTo* | Množstvo dát, ktoré obsahová medzipamäť stiahla z ľubovoľnej z partnerských obsahových medzipamätí počas obdobia hlásenia. | |||||||||
Bajty odoslané zo zdroja | Súčet bytesFromOriginTo* | Množstvo dát, ktoré obsahová medzipamäť stiahla cez internet počas obdobia hlásenia. | |||||||||
Odoslané bajty | Súčet bytesImportedBy* | Množstvo dát odoslaných prostredníctvom obsahovej medzipamäte počas obdobia hlásenia. | |||||||||
Stiahnuté bajty | bytesFrom <Origin,Parent,Peer>To | Množstvo dát, ktoré obsahová medzipamäť stiahla buď cez internet, alebo z partnerských či nadradených medzipamätí počas obdobia hlásenia. | |||||||||
Odoslané bajty | Celkové množstvo dát, ktoré obsahová pamäť odoslala počas obdobia hlásenia. Nenulová hodnota znamená, že obsahová medzipamäť funguje. | Súčet bytesFrom*To* |
Získanie dát zaťaženia medzipamäte
V prípade potreby môžete zistiť, ako súrne obsahová medzipamäť vyžadovala viac miesta v úložisku počas obdobia hlásenia. Nižšie hodnoty znamenajú, že obsahová medzipamäť nepotrebuje ďalšie miesto.
Monitor aktivity vypočítava zaťaženie medzipamäte takto:
100 %, ak je hodnota requestsRejectedForNoSpace > 0
80 %, ak je hodnota bytesPurgedYoungerThan1Day > 0
60 %, ak je hodnota bytesPurgedYoungerThan7Days > 0
40 %, ak je hodnota bytesPurgedYoungerThan30Days > 0
20 %, ak je hodnota bytesPurgedTotal > 0
0 % vo všetkých ostatných prípadoch
Monitor aktivity tiež porovnáva vyššie uvedené položky tak, ako je uvedené nižšie, napríklad na vypočítanie hodnôt za časový interval dlhší ako jedno obdobie.
Počty bajtov, importov, žiadostí alebo odpovedí sčítajte za daný časový interval.
Ak chcete zistiť, aké je zaťaženie medzipamäte, vypočítajte maximum za daný časový interval.
Vzorový kód na čítanie databázy metrík
#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
}
}