Målinger av innholdsbufring på Macen
Innholdsbufringstjenesten lagrer målinger i følgende mappe:
/Library/Application Support/Apple/AssetCache/Metrics.
Metrikken flyttes ikke med innholdsbufferen, men oppbevares i stedet på denne plasseringen. Hvis du for eksempel flytter bufferen fra:
/Library/Application Support/Apple/AssetCache/Data
til
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
vil metrikken fortsatt lagres i
/Library/Application Support/Apple/AssetCache/Metrics
Hvis det noen gang er blitt brukt innholdsbufring på en Mac, inneholder denne mappen en fil kalt Metrics.db, og den kan inneholde en eller flere filer med lignende navn. Disse filene utgjør en SQLite-database du kan lese.
CoreData-objektmodellen som beskriver metrikken er tilgjengelig som «Metric» i /usr/libexec/AssetCache/AssetCache.momd.
Merk: Selv om dette er en beskrivelse av versjon 7-modellen, kan Apple endre denne modellen – eller bruke en annen database enn SQLite – i fremtidige versjoner av macOS, uten forvarsel. Dette kan kreve oppdateringer til skript du har konfigurert til å samle innholdsbufringsdata.
Innholdsbufferen:
legger til en ny rad i databasen hvert minutt mens den kjører
legger ikke til «all zero»-rader når den er inaktiv – den hopper over slike rader
modifiserer ikke eksisterende rader
sletter periodisk rader som er eldre enn 30 dager
Tips: Du kan ender rapporteringsperioden fra 60 sekunder ved å endre den avanserte innstillingen for MetricsInterval
, og du kan endre maksimal alder på lagrede rader fra 30 dager ved å endre den avanserte innstillingen for MetricsMaxAge
.
Hver rad i databasen inneholder følgende kolonner. Hvert objekt er valgfritt, bortsett fra creationDate
.
Objekt | Beskrivelse | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Mengden data som innholdsbufferen lastet ned i løpet av rapporteringsperioden, men ikke kunne legge til i bufferen. | ||||||||||
bytesFromCacheToChild | Mengden data som innholdsbufferen leverte fra bufferen til underordnede innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromCacheToClient | Mengden data som innholdsbufferen leverte fra bufferen til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
bytesFromCacheToPeer | Mengden data som innholdsbufferen leverte fra bufferen til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromOriginToChild | Mengden data som innholdsbufferen lastet ned fra internett og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromOriginToClient | Mengden data som innholdsbufferen lastet ned fra internett og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
bytesFromOriginToPeer | Mengden data som innholdsbufferen lastet ned fra internett og leverte til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromParentToChild | Mengden data som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromParentToClient | Mengden data som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
bytesFromParentToPeer | Mengden data som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromPeerToChild | Mengden data som innholdsbufferen mottok fra peer-enheters innholdsbuffere og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
bytesFromPeerToClient | Mengden data som innholdsbufferen mottok fra peer-enheters innholdsbuffere og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
bytesImportedByHTTP | Mengden data som innholdsbufferen mottok over HTTP i løpet av rapporteringsperioden. | ||||||||||
bytesImportedByXPC | Mengden data som innholdsbufferen mottok over XPC i løpet av rapporteringsperioden. | ||||||||||
bytesPurgedTotal | Mengden data som innholdsbufferen tømte fra bufferen i løpet av rapporteringsperioden. Inkluderer bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Mengden data som innholdsbufferen tømte fra bufferen i løpet av rapporteringsperioden, som den hadde lagt til i bufferen for mindre enn én dag siden. | ||||||||||
bytesPurgedYoungerThan30Days | Mengden data som innholdsbufferen tømte fra bufferen i løpet av rapporteringsperioden, som den hadde lagt til i bufferen for mindre enn 30 dager siden. Inkluderer bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Mengden data som innholdsbufferen tømte fra bufferen i løpet av rapporteringsperioden, som den hadde lagt til i bufferen for mindre enn 7 dager siden. Inkluderer bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Dato for når dette metrikkobjektet ble samlet inn. Dette metrikkobjektet beskrivder innholdsbufferens ytelse i løpet av perioden som slutter på creationDate. | ||||||||||
importsByHTTP | Antall forespørsler om opplastinger som innholdsbufferen mottok via HTTP i løpet av rapporteringsperioden. | ||||||||||
importsByXPC | Antall forespørsler om opplastinger som innholdsbufferen mottok via XPC i løpet av rapporteringsperioden. | ||||||||||
period | Varigheten, i sekunder, for rapporteringsperioden som slutter på creationDate. | ||||||||||
repliesFromCacheToChild | Antall svar som innholdsbufferen leverte fra bufferen til underordnede innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromCacheToClient | Antall svar som innholdsbufferen leverte fra bufferen til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
repliesFromCacheToPeer | Antall svar som innholdsbufferen leverte fra bufferen til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromOriginToChild | Antall svar som innholdsbufferen lastet ned fra internett og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromOriginToClient | Antall svar som innholdsbufferen lastet ned fra internett og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
repliesFromOriginToPeer | Antall svar som innholdsbufferen lastet ned fra internett og leverte til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromParentToChild | Antall svar som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromParentToClient | Antall svar som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
repliesFromParentToPeer | Antall svar som innholdsbufferen lastet ned fra overordnede enheters innholdsbuffere og leverte til peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromPeerToChild | Antall svar som innholdsbufferen mottok fra peer-enheters innholdsbuffere og leverte til underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
repliesFromPeerToClient | Antall svar som innholdsbufferen mottok fra peer-enheters innholdsbuffere og leverte til Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
requestsFromChild | Antall forespørsler om nedlastinger som innholdsbufferen mottok fra underordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
requestsFromClient | Antall forespørsler om nedlastinger som innholdsbufferen mottok fra Apple-klientenheter i løpet av rapporteringsperioden. | ||||||||||
requestsFromPeer | Antall forespørsler om nedlastinger som innholdsbufferen mottok fra peer-enheters innholdsbuffere i løpet av rapporteringsperioden. | ||||||||||
requestsRejectedForNoSpace | Antall forespørsler om nedlastinger som innholdsbufferen avslo i løpet av rapporteringsperioden grunnet høy bufferbelastning (med HTTP-svarkode 503, Tjeneste ikke tilgjengelig). |
Gruppér resultater
Det kan være nyttig å gruppere noen av objektene over. Her er et par forslag. Alt innhold er basert på heltall.
Innhold | Grupperte objekter | Beskrivelse | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Byte lastet ned | bytesFrom <Origin,Parent,Peer>To | Mengden data som innholdsbufferen lastet ned enten fra internett eller fra peer-enheter eller overordnede enheter i løpet av rapporteringsperioden. | |||||||||
Byte lastet opp | Summen av bytesImportedBy* | Datamengden som ble lastet opp gjennom innholdsbufferen i løpet av rapporteringsperioden. | |||||||||
Byte levert | Totalt antall data som innholdsbufferen leverte i løpet av rapporteringsperioden. Når denne verdien ikke er null, fungerer innholdsbufferen. | Summen av bytesFrom*To* | |||||||||
Byte levert fra buffer | Summen av bytesFromCacheTo* | Mengden data som innholdsbufferen leverte fra bufferen i løpet av rapporteringsperioden. Jo nærmere denne verdien er Bytes levert-verdien, jo mer hjelp innholdsbufferen. | |||||||||
Byte levert fra opprinnelig kilde | Summen av bytesFromOriginTo* | Mengden data som innholdsbufferen lastet ned fra internett i løpet av rapporteringsperioden. | |||||||||
Byte levert fra overordnede enheter | Summen av bytesFromParentTo* | Mengden data som innholdsbufferen lastet ned fra hvilke som helst av sine overordnede enheters innholdsbuffere i løpet av rapporteringsperioden. | |||||||||
Byte levert fra peer-enhet | Summen av bytesFromPeerTo* | Mengden data som innholdsbufferen lastet ned fra hvilke som helst av sine peer-enheter med innholdsbuffere i løpet av rapporteringsperioden. | |||||||||
Byte levert til klienter | Summen av bytesFrom*ToClient | Mengden data som innholdsbufferen leverte til Apple-klientenheter i løpet av rapporteringsperioden. | |||||||||
Byte levert til peer-enhet | Summen av bytesFrom*ToPeer | Mengden data som innholdsbufferen leverte til hvilke som helst av sine peer-enheter med innholdsbuffere i løpet av rapporteringsperioden. | |||||||||
Byte levert til underordnede enheter | Summen av bytesFrom*ToChild | Mengden data som innholdsbufferen leverte til hvilke som helst av sine unerordnede innholdsbuffere i løpet av rapporteringsperioden. |
Hent data om bufferbelastning
Du kan se gjennom hvor raskt innholdsbufferen trenger mer lagringsplass i løpe av rapporteringsperioden. Jo lavere bufferbelastning, jo bedre.
Aktivitetsmonitor regner ut bufferbelastning som følger:
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
0 % ellers
Aktivitetsmonitor samler også objekter som følger, for eksempel for å regne ut verdier over tidsintervaller som er lenger enn én periode.
For antall byte, importer, forespørsler eller svar, summerer du dem i løpet av tidsintervallet.
For bufferbelastning regner du ut maksimalt antall i løpet av tidsintervallet.
Eksempelkode for å lese metrikkdatabasen
#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
}
}