Indicateurs de mise en cache de contenu sur Mac
La mise en cache de contenu stocke des indicateurs dans le dossier suivant :
/Bibliothèque/Application Support/Apple/AssetCache/Metrics.
Les indicateurs ne sont pas déplacés avec le contenu mis en cache. Au lieu de cela, ils sont toujours stockés dans cet emplacement. Par exemple, si vous déplacez le cache de :
/Bibliothèque/Application Support/Apple/AssetCache/Data
vers
/Volumes/Data/Bibliothèque/Application Support/Apple/AssetCache/Data
les indicateurs restent stockés dans
/Bibliothèque/Application Support/Apple/AssetCache/Metrics
Si la mise en cache de contenu a déjà été utilisée sur un Mac, ce dossier contient un fichier nommé Metrics.db et peut contenir un ou plusieurs autres fichiers avec des noms similaires. Ces fichiers constituent une base de données SQLite que vous pouvez lire.
Le modèle d’objet CoreData qui décrit les indicateurs est disponible sous la forme de l’entité « Metric » dans /usr/libexec/AssetCache/AssetCache.momd.
Remarque : bien qu’il s’agisse d’une description du modèle de la version 7, Apple est susceptible de changer ce modèle, ou d’utiliser une base de données autre que SQLite, dans des versions futures de macOS, sans préavis. Cela pourrait nécessiter des mises à jour de tout script que vous auriez configuré afin d’agréger les données de mise en cache de contenu.
Le cache de contenu :
ajoute un nouveau rang à la base de données à chaque minute lors de son exécution ;
n’ajoute pas de rangs contenant uniquement des zéros lorsqu’elle est inactive, elle ignore simplement l’ajout de ces rangs ;
ne modifie pas les rangs existants ;
Supprime régulièrement les rangs lorsqu’ils datent de plus de 30 jours.
Astuce : vous pouvez changer la période de rapport de 60 secondes en modifiant le réglage avancé MetricsInterval
et vous pouvez changer l’âge maximal des rangs stockés de 30 jours en modifiant le réglage avancé MetricsMaxAge
.
Chaque rang de la base de données contient les colonnes suivantes. Chaque objet est facultatif, sauf creationDate
.
Objet | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Quantité de données téléchargées par le cache de contenu pendant la période de rapport, mais n’ayant pas pu être ajoutées au cache. | ||||||||||
bytesFromCacheToChild | Quantité de données que le cache de contenu a fournies de son cache à des caches de contenu enfants pendant la période de rapport. | ||||||||||
bytesFromCacheToClient | Quantité de données que le cache de contenu a fournies de son cache à des appareils Apple clients pendant la période de rapport. | ||||||||||
bytesFromCacheToPeer | Quantité de données que le cache de contenu a fournies de son cache à des caches de contenu pairs pendant la période de rapport. | ||||||||||
bytesFromOriginToChild | Quantité de données que le cache de contenu a téléchargées depuis Internet et a fournies à des caches de contenu enfants pendant la période de rapport. | ||||||||||
bytesFromOriginToClient | Quantité de données que le cache de contenu a téléchargées depuis Internet et a fournies à des appareils Apple clients pendant la période de rapport. | ||||||||||
bytesFromOriginToPeer | Quantité de données que le cache de contenu a téléchargées depuis Internet et a fournies à des caches de contenu pairs pendant la période de rapport. | ||||||||||
bytesFromParentToChild | Quantité de données que le cache de contenu a téléchargées depuis des caches de contenu parents et a fournies à des caches de contenu enfants pendant la période de rapport. | ||||||||||
bytesFromParentToClient | Quantité de données que le cache de contenu a téléchargées depuis des caches de contenu parents et a fournies à des appareils Apple clients pendant la période de rapport. | ||||||||||
bytesFromParentToPeer | Quantité de données que le cache de contenu a téléchargées depuis des caches de contenu parents et a fournies à des caches de contenu pairs pendant la période de rapport. | ||||||||||
bytesFromPeerToChild | Quantité de données que le cache de contenu a reçues de caches de contenu pairs et a fournies à des caches de contenu enfants pendant la période de rapport. | ||||||||||
bytesFromPeerToClient | Quantité de données que le cache de contenu a reçues de caches de contenu pairs et a fournies à des appareils Apple clients pendant la période de rapport. | ||||||||||
bytesImportedByHTTP | Quantité de données que le cache de contenu a reçues via HTTP pendant la période de rapport. | ||||||||||
bytesImportedByXPC | Quantité de données que le cache de contenu a reçues via XPC pendant la période de rapport. | ||||||||||
bytesPurgedTotal | Quantité de données que le cache de contenu a purgées de son cache pendant la période de rapport. Comprend bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Quantité de données que le cache de contenu a purgées de son cache pendant la période de rapport, qu’il avait ajoutées au cache moins d’un jour auparavant. | ||||||||||
bytesPurgedYoungerThan30Days | Quantité de données que le cache de contenu a purgées de son cache pendant la période de rapport, qu’il avait ajoutées au cache moins de 30 jours auparavant. Comprend bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Quantité de données que le cache de contenu a purgées de son cache pendant la période de rapport, qu’il avait ajoutées au cache moins de 7 jours auparavant. Comprend bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Date à laquelle cet objet d’indicateur a été collecté. Cet élément d’indicateur décrit les performances du cache de contenu pendant la période se terminant à la date creationDate. | ||||||||||
importsByHTTP | Nombre de demandes de chargements que le cache de contenu a reçues via HTTP pendant la période de rapport. | ||||||||||
importsByXPC | Nombre de demandes de chargements que le cache de contenu a reçues via XPC pendant la période de rapport. | ||||||||||
period | Durée, en secondes, de la période de rapport se terminant à la date creationDate. | ||||||||||
repliesFromCacheToChild | Nombre de réponses que le cache de contenu a fournies de son cache à des caches de contenu enfants pendant la période de rapport. | ||||||||||
repliesFromCacheToClient | Nombre de réponses que le cache de contenu a fournies de son cache à des appareils Apple clients pendant la période de rapport. | ||||||||||
repliesFromCacheToPeer | Nombre de réponses que le cache de contenu a fournies de son cache à des caches de contenu pairs pendant la période de rapport. | ||||||||||
repliesFromOriginToChild | Nombre de réponses que le cache de contenu a téléchargées depuis Internet et a fournies à des caches de contenu enfants pendant la période de rapport. | ||||||||||
repliesFromOriginToClient | Nombre de réponses que le cache de contenu a téléchargées depuis Internet et a fournies à des appareils Apple clients pendant la période de rapport. | ||||||||||
repliesFromOriginToPeer | Nombre de réponses que le cache de contenu a téléchargées depuis Internet et a fournies à des caches de contenu pairs pendant la période de rapport. | ||||||||||
repliesFromParentToChild | Nombre de réponses que le cache de contenu a téléchargé depuis des caches de contenu parents et a fourni à des caches de contenu enfants pendant la période de rapport. | ||||||||||
repliesFromParentToClient | Nombre de réponses que le cache de contenu a téléchargé depuis des caches de contenu parents et a fourni à des appareils Apple clients pendant la période de rapport. | ||||||||||
repliesFromParentToPeer | Nombre de réponses que le cache de contenu a téléchargées depuis des caches de contenu parents et a fournies à des caches de contenu pairs pendant la période de rapport. | ||||||||||
repliesFromPeerToChild | Nombre de réponses que le cache de contenu a reçues de caches de contenu pairs et a fournies à des caches de contenu enfants pendant la période de rapport. | ||||||||||
repliesFromPeerToClient | Nombre de réponses que le cache de contenu a reçues de caches de contenu pairs et a fournies à des appareils Apple clients pendant la période de rapport. | ||||||||||
requestsFromChild | Nombre de demandes de téléchargements que le cache de contenu a reçues de caches de contenu enfants pendant la période de rapport. | ||||||||||
requestsFromClient | Nombre de demandes de téléchargements que le cache de contenu a reçues de appareils Apple clients pendant la période de rapport. | ||||||||||
requestsFromPeer | Nombre de demandes de téléchargements que le cache de contenu a reçues de caches de contenu pairs pendant la période de rapport. | ||||||||||
requestsRejectedForNoSpace | Nombre de demandes de téléchargements que le cache de contenu a refusées pendant la période de rapport en raison d’une forte pression de cache (avec code de réponse HTTP 503, Service indisponible). |
Grouper les résultats
Vous trouverez peut-être utile de regrouper certains des éléments ci-dessus. Voici quelques suggestions. Tout le contenu est basé sur des nombres entiers.
Contenu | Objets groupés | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Octets chargés | Somme de bytesImportedBy* | Quantité de données chargées à travers le cache de contenu pendant la période de rapport. | |||||||||
Octets fournis | Quantité totale de données que le cache de contenu a fournies pendant la période de rapport. Lorsque cette valeur diffère de zéro, le contenu est mis en cache. | Somme de bytesFrom*To* | |||||||||
Octets fournis à un client | Somme de bytesFrom*ToClient | Quantité de données que le cache de contenu a fournies à des appareils Apple clients pendant la période de rapport. | |||||||||
Octets fournis à un enfant | Somme de bytesFrom*ToChild | Quantité de données que le cache de contenu a fournies à l’un de ses caches de contenu enfants pendant la période de rapport. | |||||||||
Octets fournis à un pair | Somme de bytesFrom*ToPeer | Quantité de données que le cache de contenu a fournies à l’un de ses caches de contenu pairs pendant la période de rapport. | |||||||||
Octets fournis depuis l’origine | Somme de bytesFromOriginTo* | Quantité de données que le cache de contenu a téléchargées sur Internet pendant la période de rapport. | |||||||||
Octets fournis depuis le cache | Somme de bytesFromCacheTo* | Quantité de données que le cache de contenu a fournies depuis son cache pendant la période de rapport. Plus cette valeur est proche de celle des octets fournis, plus la mise en cache de contenu a été utile. | |||||||||
Octets fournis depuis un pair | Somme de bytesFromPeerTo* | Quantité de données que le cache de contenu a téléchargées de l’un de ses caches de contenu pairs pendant la période de rapport. | |||||||||
Octets fournis depuis un parent | Somme de bytesFromParentTo* | Quantité de données que le cache de contenu a téléchargées de l’un de ses caches de contenu parents pendant la période de rapport. | |||||||||
Octets téléchargés | bytesFrom <Origin,Parent,Peer>To | Quantité de données que le cache de contenu a téléchargées soit depuis Internet, soit depuis des pairs ou des parents, pendant la période de rapport. |
Obtenir des données sur la pression de cache
Vous pouvez examiner dans quelle mesure le cache de contenu a eu besoin de davantage d’espace de stockage au cours de la période de rapport. Une pression de cache faible est préférable.
Moniteur d’activité calcule la pression de cache comme suit :
100 % lorsque requestsRejectedForNoSpace > 0
80 % lorsque bytesPurgedYoungerThan1Day > 0
60 % lorsque bytesPurgedYoungerThan7Days > 0
40 % lorsque bytesPurgedYoungerThan30Days > 0
20 % lorsque bytesPurgedTotal > 0
0 % dans les autres cas
Moniteur d’activité rassemble également les éléments ci-dessus comme suit, par exemple pour calculer les valeurs au cours d’un intervalle de temps supérieur à une période.
Pour le nombre d’octets, le nombre d’importations, le nombre de requêtes ou le nombre de réponses, somme de ceux-ci sur l’intervalle de temps.
Pour la pression de cache, calcul du maximum sur l’intervalle de temps.
Exemple de code pour la lecture de la base de données des indicateurs
#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
}
}