Målinger af indlæsning af indhold i buffer på Mac
Indlæsning af indhold i buffer gemmer målinger i følgende mappe:
/Library/Application Support/Apple/AssetCache/Metrics.
Målingerne flyttes ikke sammen med bufferindholdet. De gemmes altid på denne placering. Hvis du f.eks. flytter bufferen fra:
/Library/Application Support/Apple/AssetCache/Data
til
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
vil målingerne stadig være lagret i
/Bibliotek/Application Support/Apple/AssetCache/Målinger
Hvis der nogensinde før er brugt indlæsning af indhold i buffer på en Mac, indeholder mappen et arkiv med navnet Metrics.db, og den kan også indeholde et eller flere andre arkiver med lignende navne. Disse arkiver udgør en SQLite-database, som du kan læse.
Den CoreData-objektmodel, der beskriver målingerne, er tilgængelig som enheden “Metric” i /usr/libexec/AssetCache/AssetCache.momd.
Bemærk: Selvom dette er en beskrivelse af version 7-modellen her, kan Apple uden varsel ændre denne model eller bruge en anden database end SQLite i fremtidige versioner af macOS. Hvis det sker, er der brug for at opdatere eventuelle instrukser, du har konfigureret for at samle data til indlæsning af indhold i buffer.
Indholdsbufferen:
Føjer en ny række til databasen hvert minut, når den er aktiv
Tilføjer ikke ”all zero”-rækker, når den er passiv – denne type rækker springes over
Ændrer ikke eksisterende rækker
Sletter rækker, der er mere end 30 dage gamle
Tip: Du kan ændre rapporteringsperioden fra 60 sekunder ved at ændre den avancerede indstilling MetricsInterval
, og du kan ændre den maksimale alder på lagrede rækker fra 30 dage ved at ændre den avancerede indstilling MetricsMaxAge
.
Hver række i databasen indeholder følgende kolonner. Hvert objekt er valgfrit undtagen creationDate
.
Objekt | Beskrivelse | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Den mængde data, indholdsbufferen har hentet i rapporteringsperioden, men ikke kunne føje til sin buffer. | ||||||||||
bytesFromCacheToChild | Den mængde data, indholdsbufferen har leveret fra sin buffer til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromCacheToClient | Den mængde data, indholdsbufferen har leveret fra sin buffer til Apple-klientenheder i rapporteringsperioden. | ||||||||||
bytesFromCacheToPeer | Den mængde data, indholdsbufferen har leveret fra sin buffer til peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromOriginToChild | Den mængde data, indholdsbufferen har hentet via internettet og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromOriginToClient | Den mængde data, indholdsbufferen har hentet via internettet og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
bytesFromOriginToPeer | Den mængde data, indholdsbufferen har hentet via internettet og leveret til peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromParentToChild | Den mængde data, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromParentToClient | Den mængde data, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
bytesFromParentToPeer | Den mængde data, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromPeerToChild | Den mængde data, indholdsbufferen har modtaget fra peer-indholdsbuffere og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
bytesFromPeerToClient | Den mængde data, indholdsbufferen har modtaget fra peer-indholdsbuffere og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
bytesImportedByHTTP | Den mængde data, indholdsbufferen har modtaget over HTTP i rapporteringsperioden. | ||||||||||
bytesImportedByXPC | Den mængde data, indholdsbufferen har modtaget over XPC i rapporteringsperioden. | ||||||||||
bytesPurgedTotal | Den mængde data, indholdsbufferen har slettet fra sin buffer i rapporteringsperioden. Omfatter bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Den mængde data, indholdsbufferen har slettet fra sin buffer i rapporteringsperioden, og som er føjet til bufferen for mindre end en dag siden. | ||||||||||
bytesPurgedYoungerThan30Days | Den mængde data, indholdsbufferen har slettet fra sin buffer i rapporteringsperioden, og som er føjet til bufferen for mindre end 30 dage siden. Omfatter bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Den mængde data, indholdsbufferen har slettet fra sin buffer i rapporteringsperioden, og som er føjet til bufferen for mindre end syv dage siden. Omfatter bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Den dato, hvor målingsobjektet blev indsamlet. Målingsemnet beskriver indholdsbufferens præstation i den periode, der slutter på creationDate. | ||||||||||
importsByHTTP | Det antal anmodninger om overførsel, indholdsbufferen har modtaget via HTTP i rapporteringsperioden. | ||||||||||
importsByXPC | Det antal anmodninger om overførsel, indholdsbufferen har modtaget via XPC i rapporteringsperioden. | ||||||||||
period | Varighed – i sekunder – af rapporteringsperioden, der slutter på creationDate. | ||||||||||
repliesFromCacheToChild | Det antal svar, indholdsbufferen har leveret fra sin buffer til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromCacheToClient | Det antal svar, indholdsbufferen har leveret fra sin buffer til Apple-klientenheder i rapporteringsperioden. | ||||||||||
repliesFromCacheToPeer | Det antal svar, indholdsbufferen har leveret fra sin buffer til peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromOriginToChild | Det antal svar, indholdsbufferen har hentet via internettet og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromOriginToClient | Det antal svar, indholdsbufferen har hentet via internettet og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
repliesFromOriginToPeer | Det antal svar, indholdsbufferen har hentet via internettet og leveret til peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromParentToChild | Det antal svar, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromParentToClient | Det antal svar, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
repliesFromParentToPeer | Det antal svar, indholdsbufferen har hentet fra overordnede indholdsbuffere og leveret til peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromPeerToChild | Det antal svar, indholdsbufferen har modtaget fra peer-indholdsbuffere og leveret til underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
repliesFromPeerToClient | Det antal svar, indholdsbufferen har modtaget fra peer-indholdsbuffere og leveret til Apple-klientenheder i rapporteringsperioden. | ||||||||||
requestsFromChild | Det antal anmodninger om hentning, indholdsbufferen har modtaget fra underordnede indholdsbuffere i rapporteringsperioden. | ||||||||||
requestsFromClient | Det antal anmodninger om hentning, indholdsbufferen har modtaget fra Apple-klientenheder i rapporteringsperioden. | ||||||||||
requestsFromPeer | Det antal anmodninger om hentning, indholdsbufferen har modtaget fra peer-indholdsbuffere i rapporteringsperioden. | ||||||||||
requestsRejectedForNoSpace | Det antal anmodninger om hentning, indholdsbufferen har afvist i rapporteringsperioden på grund af højt buffertryk (med HTTP-svarkode 503, Tjeneste utilgængelig). |
Grupper resultater
Det kan være nyttigt at gruppere nogle af ovenstående emner. Her er nogle forslag. Alt indhold er baseret på heltal.
Indhold | Grupperede objekter | Beskrivelse | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Byte leveret fra buffer | Sum af bytesFromCacheTo* | Den mængde data, indholdsbufferen har leveret fra sin buffer i rapporteringsperioden. Jo tættere denne værdi er på værdien af Byte leveret, desto mere hjælper indholdsbufferen. | |||||||||
Byte leveret fra overordnet | Sum af bytesFromParentTo* | Den mængde data, indholdsbufferen har hentet fra sine overordnede indholdsbuffere i rapporteringsperioden. | |||||||||
Byte leveret fra peer | Sum af bytesFromPeerTo* | Den mængde data, indholdsbufferen har hentet fra sine peer-indholdsbuffere i rapporteringsperioden. | |||||||||
Byte leveret fra udgangspunkt | Sum af bytesFromOriginTo* | Den mængde data, indholdsbufferen har hentet via internettet i rapporteringsperioden. | |||||||||
Byte leveret til klient | Sum af bytesFrom*ToClient | Den mængde data, indholdsbufferen har leveret til Apple-klientenheder i rapporteringsperioden. | |||||||||
Byte leveret til peer | Sum af bytesFrom*ToPeer | Den mængde data, indholdsbufferen har leveret til sine peer-indholdsbuffere i rapporteringsperioden. | |||||||||
Byte leveret til underordnet | Sum af bytesFrom*ToChild | Den mængde data, indholdsbufferen har leveret til sine underordnede indholdsbuffere i rapporteringsperioden. | |||||||||
Byte overført | Sum af bytesImportedBy* | Den mængde data, der er overført via indholdsbufferen i rapporteringsperioden. | |||||||||
Hentede byte | bytesFrom <Udgangspunkt,Overordnet,Peer>To | Den mængde data, indholdsbufferen har hentet enten via internettet eller fra peers eller overordnede i rapporteringsperioden. | |||||||||
Leverede byte | Den samlede mængde data, indholdsbufferen har leveret i rapporteringsperioden. Når denne værdi ikke er nul, virker indholdsbufferen. | Sum af bytesFrom*To* |
Hent data om buffertryk
Du kan se, i hvor grad indholdsbufferen havde behov for mere lagringsplads i rapporteringsperioden. Lavere buffertryk er bedre.
Aktivitetsovervågning beregner buffertrykket sådan:
100 %, når requestsRejectedForNoSpace > 0
80 %, når bytesPurgedYoungerThan1Day > 0
60 %, når bytesPurgedYoungerThan7Days > 0
40 %, når bytesPurgedYoungerThan30Days > 0
20 %, når bytesPurgedTotal > 0
Ellers 0 %
Aktivitetsovervågning samordner også ovenstående emner på følgende måde for f.eks. at kunne beregne værdier over et tidsinterval, som er længere end en periode.
Antal byte, antal importer, antal anmodninger eller antal svar lægges sammen over tidsintervallet.
For buffertryk beregnes maksimum over tidsintervallet.
Eksempelkode til læsning af målingsdatabase
#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
}
}