Metriche della cache dei contenuti sul Mac
La cache dei contenuti archivia le metriche nella seguente cartella:
/Library/Application Support/Apple/AssetCache/Metrics.
Le metriche non si spostano con il contenuto della cache, ma vengono sempre archiviate in questa posizione. Ad esempio, se sposti la cache da:
/Library/Application Support/Apple/AssetCache/Data
a
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
le metriche vengono comunque archiviate in
/Library/Application Support/Apple/AssetCache/Metrics
Se la cache dei contenuti è stata utilizzata almeno una volta su un Mac, questa cartella contiene un file chiamato Metrics.db e può contenere altri file con nomi simili. Questi file costituiscono un database SQLite che puoi leggere.
Il modello di oggetto CoreData che descrive le metriche è disponibile come entità “Metric” in /usr/libexec/AssetCache/AssetCache.momd.
Nota: sebbene si tratti di una descrizione della versione 7 del modello, Apple potrebbe cambiare tale modello o usare un database diverso da SQLite nelle future versioni di macOS senza preavviso. Ciò potrebbe richiedere aggiornamenti a qualsiasi script che hai configurato per aggregare i dati della cache dei contenuti.
Cache dei contenuti:
Aggiunge una nuova riga al database ogni minuto durante l’esecuzione.
Non aggiunge le righe “tutti zero” quando non è attivo; semplicemente salta l’aggiunta di tali righe.
Non modifica le righe esistenti.
Elimina periodicamente le righe più vecchie di 30 giorni.
Suggerimento: puoi modificare il periodo del resoconto e utilizzarne uno diverso da 60 secondi modificando l’impostazione avanzata MetricsInterval
e puoi modificare l’antichità massima delle righe archiviate e utilizzarne una diversa da 30 giorni modificando l’impostazione avanzata MetricsMaxAge
.
Ogni riga del database contiene le seguenti colonne. Ogni oggetto è opzionale eccetto creationDate
.
Oggetto | Descrizione | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Quantità di dati che la cache dei contenuti ha scaricato durante il periodo mostrato nel grafico senza poterli aggiungere alla sua cache. | ||||||||||
bytesFromCacheToChild | Quantità di dati che la cache dei contenuti ha fornito dalla sua cache alle cache di contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
bytesFromCacheToClient | Quantità di dati che la cache dei contenuti ha fornito dalla sua cache ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
bytesFromCacheToPeer | Quantità di dati che la cache dei contenuti ha fornito dalla sua cache alle cache di contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
bytesFromOriginToChild | Quantità di dati che la cache dei contenuti ha scaricato tramite internet e fornito alle cache di contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
bytesFromOriginToClient | Quantità di dati che la cache dei contenuti ha scaricato tramite internet e fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
bytesFromOriginToPeer | Quantità di dati che la cache dei contenuti ha scaricato tramite internet e fornito alle cache di contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
bytesFromParentToChild | Quantità di dati che la cache dei contenuti ha scaricato dalle cache padre e fornito alle cache dei contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
bytesFromParentToClient | Quantità di dati che la cache dei contenuti ha scaricato dalle cache padre e fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
bytesFromParentToPeer | Quantità di dati che la cache dei contenuti ha scaricato dalle cache di contenuti padre e fornito alle cache di contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
bytesFromPeerToChild | Quantità di dati che la cache dei contenuti ha ricevuto dalle cache di contenuti peer e fornito alle cache di contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
bytesFromPeerToClient | Quantità di dati che la cache dei contenuti ha ricevuto dalle cache di contenuti peer e fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
bytesImportedByHTTP | Quantità di dati che la cache dei contenuti ha ricevuto tramite HTTP durante il periodo mostrato nel grafico. | ||||||||||
bytesImportedByXPC | Quantità di dati che la cache dei contenuti ha ricevuto tramite XPC durante il periodo mostrato nel grafico. | ||||||||||
bytesPurgedTotal | Quantità di dati che la cache dei contenuti ha eliminato dalla cache durante il periodo mostrato nel grafico. Include bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Quantità di dati che la cache dei contenuti ha eliminato dalla cache durante il periodo mostrato nel grafico, che ha aggiunto alla cache da meno di un giorno. | ||||||||||
bytesPurgedYoungerThan30Days | Quantità di dati che la cache dei contenuti ha eliminato dalla cache durante il periodo mostrato nel grafico, che ha aggiunto alla cache da meno di 30 giorni. Include bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Quantità di dati che la cache dei contenuti ha eliminato dalla cache durante il periodo mostrato nel grafico, che ha aggiunto alla cache da meno di 7 giorni. Include bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Data in cui questo oggetto della metrica è stato raccolto Questo elemento della metrica descrive la performance della cache dei contenuti durante il periodo che termina in corrispondenza di creationDate. | ||||||||||
importsByHTTP | Numero di richieste di caricamento che la cache dei contenuti ha ricevuto tramite HTTP durante il periodo mostrato nel grafico. | ||||||||||
importsByXPC | Numero di richieste di caricamento che la cache dei contenuti ha ricevuto tramite XPC durante il periodo mostrato nel grafico. | ||||||||||
period | Durata, in secondi, del periodo mostrato nel grafico che termina in corrispondenza di creationDate. | ||||||||||
repliesFromCacheToChild | Numero di risposte che la cache dei contenuti ha fornito dalla sua cache alle cache di contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
repliesFromCacheToClient | Numero di risposte che la cache dei contenuti ha fornito dalla sua cache ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
repliesFromCacheToPeer | Numero di risposte che la cache dei contenuti ha fornito dalla sua cache alle cache di contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
repliesFromOriginToChild | Numero di risposte che la cache dei contenuti ha scaricato tramite internet e fornito alle cache di contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
repliesFromOriginToClient | Numero di risposte che la cache dei contenuti ha scaricato tramite internet e fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
repliesFromOriginToPeer | Numero di risposte che la cache dei contenuti ha scaricato tramite internet e fornito alle cache di contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
repliesFromParentToChild | Numero di risposte la cache dei contenuti ha scaricato dalle cache padre e fornito alle cache dei contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
repliesFromParentToClient | Numero di risposte la cache dei contenuti ha scaricato dalle cache padre e fornito ai dispositivi client Apple figlio durante il periodo mostrato nel grafico. | ||||||||||
repliesFromParentToPeer | Numero di risposte la cache dei contenuti ha scaricato dalle cache padre e fornito alle cache dei contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
repliesFromPeerToChild | Numero di risposte la cache dei contenuti ha ricevuto dalle cache peer e fornito alle cache dei contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
repliesFromPeerToClient | Numero di risposte la cache dei contenuti ha ricevuto dalle cache peer e fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
requestsFromChild | Numero di richieste di download che la cache dei contenuti ha ricevuto dalle cache dei contenuti figlio durante il periodo mostrato nel grafico. | ||||||||||
requestsFromClient | Numero di richieste di download che la cache dei contenuti ha ricevuto dai dispositivi client Apple durante il periodo mostrato nel grafico. | ||||||||||
requestsFromPeer | Numero di richieste di download che la cache dei contenuti ha ricevuto dalle cache dei contenuti peer durante il periodo mostrato nel grafico. | ||||||||||
requestsRejectedForNoSpace | Numero di richieste di download che la cache dei contenuti ha rifiutato durante il periodo mostrato nel grafico a causa di un’elevata pressione nella cache (con codice di risposta HTTP 503, servizio non disponibile). |
Raggruppare i risultati
Potresti trovare utile raggruppare alcuni degli elementi qui sopra. Ecco alcuni suggerimenti. Tutti i contenuti sono integri.
Contenuto | Oggetti raggruppati | Descrizione | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Byte caricati | Somma di bytesImportedBy* | Quantità di dati caricati tramite la cache dei contenuti durante il periodo mostrato nel grafico. | |||||||||
Byte forniti | Quantità totale di dati che la cache dei contenuti ha fornito durante il periodo mostrato nel grafico. Quando questo valore è diverso da zero, la cache dei contenuti sta funzionando. | Somma di bytesFrom*To* | |||||||||
Byte forniti al client | Somma di bytesFrom*ToClient | Quantità di dati che la cache dei contenuti ha fornito ai dispositivi client Apple durante il periodo mostrato nel grafico. | |||||||||
Byte forniti al figlio | Somma di bytesFrom*ToChild | Quantità di dati che la cache dei contenuti ha fornito a qualsiasi cache dei contenuti figlio durante il periodo mostrato nel grafico. | |||||||||
Byte forniti al peer | Somma di bytesFrom*ToPeer | Quantità di dati che la cache dei contenuti ha fornito a qualsiasi cache dei contenuti peer durante il periodo mostrato nel grafico. | |||||||||
Byte forniti dal padre | Somma di bytesFromParentTo* | Quantità di dati che la cache dei contenuti ha scaricato da qualsiasi cache dei contenuti padre durante il periodo mostrato nel grafico. | |||||||||
Byte forniti dal peer | Somma di bytesFromPeerTo* | Quantità di dati che la cache dei contenuti ha scaricato da qualsiasi cache dei contenuti peer durante il periodo mostrato nel grafico. | |||||||||
Byte forniti dall’origine | Somma di bytesFromOriginTo* | Quantità di dati che la cache dei contenuti ha scaricato da internet durante il periodo mostrato nel grafico. | |||||||||
Byte forniti dalla cache | Somma di bytesFromCacheTo* | Quantità di dati che la cache dei contenuti ha fornito dalla cache durante il periodo mostrato nel grafico. Più questo valore si avvicina a quello dei byte forniti, più la cache dei contenuti è utile. | |||||||||
Byte scaricati | bytesFrom <Origin,Parent,Peer>To | Quantità di dati che la cache dei contenuti ha scaricato tramite internet o da peer o padre durante il periodo mostrato nel grafico. |
Ottenere dati pressione cache
Puoi verificare l’urgenza con cui la cache dei contenuti ha avuto bisogno di più spazio di archiviazione durante il periodo di riferimento. È preferibile un valore basso di pressione cache.
Monitoraggio Attività calcola la pressione cache come segue:
100% quando requestsRejectedForNoSpace > 0
80% quando bytesPurgedYoungerThan1Day > 0
60% quando bytesPurgedYoungerThan7Days > 0
40% quando bytesPurgedYoungerThan30Days > 0
20% quando bytesPurgedTotal > 0
0% negli altri casi
Monitoraggio Attività raccoglie anche gli elementi qui sopra come segue, per esempio per calcolare i valori su un intervallo di tempo più lungo di un determinato periodo.
Per conteggi di byte, importazioni, richieste o risposte, li somma all’intervallo di tempo.
Per la pressione cache, calcola il massimo rispetto all’intervallo di tempo.
Codice esemplificativo per leggere il database delle metriche
#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
}
}