Inhaltscaching-Metriken auf dem Mac
Inhaltscaching-Metriken werden im folgenden Ordner gesichert:
/Library/Application Support/Apple/AssetCache/Metrics.
Die Metriken werden nicht mit den Cacheinhalten bewegt. Sie werden immer in diesem Verzeichnis gespeichert. Wenn du zum Beispiel den Cache von:
/Library/Application Support/Apple/AssetCache/Data
nach
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
bewegst, sind die Metriken weiterhin in diesem Verzeichnis gespeichert:
/Library/Application Support/Apple/AssetCache/Metrics
Wenn Inhaltscaching schon einmal auf einem Mac verwendet wurde, enthält dieser Ordner eine Datei namens „Metrics.db“ und kann eine oder mehrere weitere Dateien mit ähnlichen Namen enthalten. Diese Dateien bilden eine lesbare SQLite-Datenbank.
Das CoreData-Objektmodell, das die Metriken beschreibt, ist als „Metric“-Instanz in /usr/libexec/AssetCache/AssetCache.momd verfügbar.
Hinweis: Auch wenn es sich hier um die Beschreibung der Modellversion 7 handelt, kann Apple dieses Modell in zukünftigen Versionen von macOS ohne vorherige Ankündigung ändern oder ein anderes Datenbankmodell als SQLite verwenden. Unter Umständen hat das zur Folge, dass Skripte, die zum Aggregieren von Cacheinhaltsdaten konfiguriert wurden, aktualisiert werden müssen.
Der Inhaltscache:
fügt während des Betriebs jede Minute eine Zeile zur Datenbank hinzu
fügt im Ruhezustand keine Zeilen mit Nullen hinzu; das Hinzufügen solcher Zeilen wird einfach übersprungen
ändert keine vorhandenen Zeilen
löscht in regelmäßigen Abständen Zeilen, wenn diese älter als 30 Tage sind
Tipp: Du kannst die Zeitspanne für die Berichtserstellung von 60 Sekunden ändern. Ändere hierfür die erweiterte Einstellung MetricsInterval
. Darüber hinaus kannst du das Maximalalter der gespeicherten Zeilen von 30 Tagen ändern, indem du die erweiterte Einstellung MetricsMaxAge
anpasst.
Jede Zeile in der Datenbank enthält die folgenden Spalten. Mit Ausnahme von „creationDate
“ sind alle Objekte optional.
Objekt | Beschreibung | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache heruntergeladen wurden, aber nicht im eigenen Cache zwischengespeichert werden konnten. | ||||||||||
bytesFromCacheToChild | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
bytesFromCacheToClient | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
bytesFromCacheToPeer | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
bytesFromOriginToChild | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
bytesFromOriginToClient | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
bytesFromOriginToPeer | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
bytesFromParentToChild | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
bytesFromParentToClient | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
bytesFromParentToPeer | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
bytesFromPeerToChild | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum von Peer-Inhaltscaches erhalten und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
bytesFromPeerToClient | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum von Peer-Inhaltscaches erhalten und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
bytesImportedByHTTP | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum via HTTP erhalten hat. | ||||||||||
bytesImportedByXPC | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum via XPC erhalten hat. | ||||||||||
bytesPurgedTotal | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum aus seinem Cache gelöscht hat. Gilt auch für bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Dies ist die Menge an Daten, die der Inhaltscache aus seinem Cache gelöscht hat. Dabei handelt es sich um Daten, die der Inhaltscache vor weniger als einem Tag zum Cache hinzugefügt hat. | ||||||||||
bytesPurgedYoungerThan30Days | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum aus seinem Cache gelöscht hat. Dabei handelt es sich um Daten, die der Inhaltscache vor weniger als 30 Tagen zum Cache hinzugefügt hat. Gilt auch für bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum aus seinem Cache gelöscht hat. Dabei handelt es sich um Daten, die der Inhaltscache vor weniger als sieben Tagen zum Cache hinzugefügt hat. Gilt auch für bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Datum, an dem dieses Metrikobjekt erfasst wurde. Dieses Metrikobjekt beschreibt die Leistungsfähigkeit des Inhaltscaches für den Zeitraum bis zum „creationDate“ (Erstellungsdatum). | ||||||||||
importsByHTTP | Dies ist die Anzahl der Uploadanfragen, die der Inhaltscache im Berichtszeitraum via HTTP erhalten hat. | ||||||||||
importsByXPC | Dies ist die Anzahl der Uploadanfragen, die der Inhaltscache im Berichtszeitraum via XPC erhalten hat. | ||||||||||
period | Dauer des Berichtszeitraums (in Sekunden) bis zum „creationDate“ (Erstellungsdatum). | ||||||||||
repliesFromCacheToChild | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
repliesFromCacheToClient | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
repliesFromCacheToPeer | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
repliesFromOriginToChild | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
repliesFromOriginToClient | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
repliesFromOriginToPeer | Dies ist die Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache über das Internet geladen und für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
repliesFromParentToChild | Dies ist Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
repliesFromParentToClient | Dies ist Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
repliesFromParentToPeer | Dies ist Anzahl der Antworten, die im Berichtszeitraum vom Inhaltscache von übergeordneten Inhaltscaches geladen und für Peer-Inhaltscaches bereitgestellt wurden. | ||||||||||
repliesFromPeerToChild | Dies ist Anzahl der Antworten, die der Inhaltscache im Berichtszeitraum von Peer-Inhaltscaches erhalten hat und für ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | ||||||||||
repliesFromPeerToClient | Dies ist Anzahl der Antworten, die der Inhaltscache im Berichtszeitraum von Peer-Inhaltscaches erhalten hat und für Client-Geräte von Apple bereitgestellt wurden. | ||||||||||
requestsFromChild | Dies ist die Anzahl der Downloadanfragen, die der Inhaltscache im Berichtszeitraum von ihm untergeordneten Inhaltscaches erhalten hat. | ||||||||||
requestsFromClient | Dies ist die Anzahl der Downloadanfragen, die der Inhaltscache im Berichtszeitraum von Client-Geräten von Apple erhalten hat. | ||||||||||
requestsFromPeer | Dies ist die Anzahl der Downloadanfragen, die der Inhaltscache im Berichtszeitraum von Peer-Inhaltscaches erhalten hat. | ||||||||||
requestsRejectedForNoSpace | Dies ist die Anzahl der Downloadanfragen, die der Inhaltscache im Berichtszeitraum aufgrund von zu hoher Cacheauslastung (mit dem HTTP-Antwortcode 503, Service Unavailable) abgelehnt hat. |
Gruppenergebnisse
Vielleicht findest du es hilfreich, einige der oben genannten Objekte zu gruppieren. Hier sind einige Vorschläge. Alle Inhalte basieren auf Ganzzahlen.
Inhalt | Gruppierte Objekte | Beschreibung | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Aus dem Cache bereitgestellte Bytes | Summe aus bytesFromCacheTo* | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum aus seinem Cache bereitgestellt hat. Je stärker sich dieser Wert dem Werten unter „Bereitgestellte Bytes“ annähert, desto effizienter ist der Inhaltscache. | |||||||||
Aus dem Peer-Inhaltscache bereitgestellte Bytes | Summe aus bytesFromPeerTo* | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum von sämtlichen Peer-Inhaltscaches geladen hat. | |||||||||
Aus dem übergeordneten Cache bereitgestellte Bytes | Summe aus bytesFromCacheTo* | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum von sämtlichen übergeordneten Inhaltscaches geladen hat. | |||||||||
Aus dem Ursprung bereitgestellte Bytes | Summe aus bytesFromCacheTo* | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum über das Internet geladen hat. | |||||||||
Bereitgestellte Bytes | Gesamtzahl der Daten, die der Inhaltscache im Berichtszeitraum bereitgestellt hat. Ein Wert ungleich 0 besagt, dass der Inhaltscache funktioniert. | Summe aus bytesFrom*To* | |||||||||
Für den Client bereitgestellte Bytes | Summe aus bytesFrom*ToClient | Dies ist die Menge an Daten, die der Inhaltscache im Berichtszeitraum für Client-Geräte von Apple bereitgestellt hat. | |||||||||
Für den Peer-Inhaltscache bereitgestellte Bytes | Summe aus bytesFrom*ToPeer | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache für sämtliche Peer-Inhaltscaches bereitgestellt wurden. | |||||||||
Für den untergeordneten Cache bereitgestellte Bytes | Summe aus bytesFrom*ToChild | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache für sämtliche ihm untergeordnete Inhaltscaches (Child) bereitgestellt wurden. | |||||||||
Heruntergeladene Bytes | bytesFrom <Origin,Parent,Peer>To | Dies ist die Menge an Daten, die im Berichtszeitraum vom Inhaltscache entweder über das Internet, von Peer-Inhaltscaches oder von übergeordneten Inhaltscaches geladen wurden. | |||||||||
Hochgeladene Bytes | Summe aus bytesImportedBy* | Dies ist die Menge an Daten, die im Berichtszeitraum über den Inhaltscache hochgeladen wurden. |
Daten zur Cacheauslastung abrufen
Du kannst überprüfen, wie dringend der Inhaltscache im Berichtszeitraum mehr Speicherplatz benötigt hat. Je niedriger dieser Wert ausfällt, desto besser.
Die Aktivitätsanzeige kalkuliert die Cacheauslastung wie folgt:
100 % wenn requestsRejectedForNoSpace > 0
80 % wenn bytesPurgedYoungerThan1Day > 0
60 % wenn bytesPurgedYoungerThan7Days > 0
40 % wenn bytesPurgedYoungerThan30Days > 0
20 % wenn bytesPurgedTotal > 0
0 % in allen anderen Fällen
Die Aktivitätsanzeige trägt außerdem die oben aufgeführten Objekte zusammen, um beispielsweise Werte über einen Zeitraum von mehr als einer Periode zu kalkulieren.
Bei Byte-, Import-, Anfrage- oder Antwortzählungen werden sie im Zeitraum summiert.
Bei der Cacheauslastung wird das Maximum im Zeitraum kalkuliert.
Beispielcode zum Lesen der Metrikdatenbank
#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
}
}