Indicateurs de mise en cache de contenu sur Mac
La mise en cache de contenu stocke les indicateurs dans le dossier suivant :
/Bibliothèque/Application Support/Apple/AssetCache/Metrics.
Les indicateurs ne se déplacent pas avec le contenu mis en cache. Ils se trouvent plutôt toujours à cet emplacement. Par exemple, si vous déplacez le cache de
/Bibliothèque/Application Support/Apple/AssetCache/Data
vers
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data,
les indicateurs sont toujours 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 accessible comme entité « Metric » dans /usr/libexec/AssetCache/AssetCache.momd.
Remarque : Il est question ici de la version 7 du modèle, mais Apple pourrait le changer ou utiliser une base de données d’un type autre que SQLite dans des versions ultérieures de macOS, sans préavis. Des mises à jour des scripts que vous avez configurés pour regrouper les données de la mise en cache pourraient être nécessaires.
Le cache de contenu :
ajoute une nouvelle rangée à la base de données pour chaque minute d’exécution;
n’ajoute aucune rangée ne contenant que des zéros lors qu’il est inactif; il saute simplement cet ajout;
ne modifie pas les rangées existantes;
supprime périodiquement les rangées lorsqu’elles datent de plus de 30 jours.
Astuce : Vous pouvez modifier la période considérée (60 secondes) en modifiant le réglage avancé MetricsInterval
, et vous pouvez modifier l’âge maximal des rangées enregistrées (30 jours) en modifiant le réglage avancé MetricsMaxAge
.
Chaque rangée de la base de données contient les colonnes ci-dessous. Chaque objet est facultatif, sauf creationDate
.
Objet | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Quantité de données que le cache de contenu a téléchargées pendant la période considérée sans pouvoir les ajouter à sa mémoire. | ||||||||||
bytesFromCacheToChild | Quantité de données que le cache de contenu a transférées de sa mémoire vers les caches de contenu enfants pendant la période considérée. | ||||||||||
bytesFromCacheToClient | Quantité de données que le cache de contenu a transférées de sa mémoire vers les appareils Apple client pendant la période considérée. | ||||||||||
bytesFromCacheToPeer | Quantité de données que le cache de contenu a transférées de sa mémoire vers les caches de contenu pairs pendant la période considérée. | ||||||||||
bytesFromOriginToChild | Quantité de données que le cache de contenu a téléchargées via Internet et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
bytesFromOriginToClient | Quantité de données que le cache de contenu a téléchargées via Internet et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
bytesFromOriginToPeer | Quantité de données que le cache de contenu a téléchargées via Internet et transférées vers les caches de contenu pairs pendant la période considérée. | ||||||||||
bytesFromParentToChild | Quantité de données que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
bytesFromParentToClient | Quantité de données que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
bytesFromParentToPeer | Quantité de données que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les caches de contenu pairs pendant la période considérée. | ||||||||||
bytesFromPeerToChild | Quantité de données que le cache de contenu a reçues des caches de contenu pairs et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
bytesFromPeerToClient | Quantité de données que le cache de contenu a reçues des caches de contenu pairs et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
bytesImportedByHTTP | Quantité de données que le cache de contenu a reçues via HTTP pendant la période considérée. | ||||||||||
bytesImportedByXPC | Quantité de données que le cache de contenu a reçues via XPC pendant la période considérée. | ||||||||||
bytesPurgedTotal | Quantité de données que le cache de contenu a épurées de sa mémoire pendant la période considérée. L’objet bytesPurgedYoungerThan30Days est inclus. | ||||||||||
bytesPurgedYoungerThan1Day | Quantité de données que le cache de contenu a épurées de sa mémoire pendant la période considérée, qui avaient été ajoutées depuis moins d’un jour. | ||||||||||
bytesPurgedYoungerThan30Days | Quantité de données que le cache de contenu a épurées de sa mémoire pendant la période considérée, qui avaient été ajoutées depuis moins de 30 jours. L’objet bytesPurgedYoungerThan7Days est inclus. | ||||||||||
bytesPurgedYoungerThan7Days | Quantité de données que le cache de contenu a épurées de sa mémoire pendant la période considérée, qui avaient été ajoutées depuis moins de sept jours. L’objet bytesPurgedYoungerThan1Day est inclus. | ||||||||||
creationDate | Date à laquelle cet indicateur a été recueilli. Celui-ci décrit les performances du cache de contenu pendant la période prenant fin à la date creationDate. | ||||||||||
importsByHTTP | Nombre de demandes de téléversement que le cache de contenu a reçues via HTTP pendant la période considérée. | ||||||||||
importsByXPC | Nombre de demandes de téléversement que le cache de contenu a reçues via XPC pendant la période considérée. | ||||||||||
period | Durée, en secondes, de la période considérée qui prend fin à la date creationDate. | ||||||||||
repliesFromCacheToChild | Nombre de réponses que le cache de contenu a transférées de sa mémoire vers les caches de contenu enfants pendant la période considérée. | ||||||||||
repliesFromCacheToClient | Nombre de réponses que le cache de contenu a transférées de sa mémoire vers les appareils Apple client pendant la période considérée. | ||||||||||
repliesFromCacheToPeer | Nombre de réponses que le cache de contenu a transférées de sa mémoire vers les caches de contenu pairs pendant la période considérée. | ||||||||||
repliesFromOriginToChild | Nombre de réponses que le cache de contenu a téléchargées via Internet et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
repliesFromOriginToClient | Nombre de réponses que le cache de contenu a téléchargées via Internet et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
repliesFromOriginToPeer | Nombre de réponses que le cache de contenu a téléchargées via Internet et transférées vers les caches de contenu pairs pendant la période considérée. | ||||||||||
repliesFromParentToChild | Nombre de réponses que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
repliesFromParentToClient | Nombre de réponses que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
repliesFromParentToPeer | Nombre de réponses que le cache de contenu a téléchargées des caches de contenu parents et transférées vers les caches de contenu pairs pendant la période considérée. | ||||||||||
repliesFromPeerToChild | Nombre de réponses que le cache de contenu a reçues des caches de contenu pairs et transférées vers les caches de contenu enfants pendant la période considérée. | ||||||||||
repliesFromPeerToClient | Nombre de réponses que le cache de contenu a reçues des caches de contenu pairs et transférées vers les appareils Apple client pendant la période considérée. | ||||||||||
requestsFromChild | Nombre de demandes de téléchargement que le cache de contenu a reçues des caches de contenu enfants pendant la période considérée. | ||||||||||
requestsFromClient | Nombre de demandes de téléchargement que le cache de contenu a reçues des appareils Apple client pendant la période considérée. | ||||||||||
requestsFromPeer | Nombre de demandes de téléchargement que le cache de contenu a reçues des caches de contenu pairs pendant la période considérée. | ||||||||||
requestsRejectedForNoSpace | Nombre de demandes de téléchargement que le cache de contenu a rejetées pendant la période considérée en raison d’une pression élevée sur la mémoire cache (code de réponse HTTP 503 : service indisponible). |
Regroupement des résultats
Vous pourriez trouver utile de regrouper certains des éléments mentionnés ci-dessus. Voici quelques suggestions. Tout le contenu est représenté par des nombres entiers.
Contenu | Objets regroupés | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Octets téléchargés | bytesFrom <Origin,Parent,Peer>To | Quantité de données que le cache de contenu a téléchargées via Internet ou auprès de pairs ou de parents pendant la période considérée. | |||||||||
Octets téléversés | Somme des objets bytesImportedBy* | Quantité de données que le cache de contenu a téléversées pendant la période considérée. | |||||||||
Octets transférés | Quantité totale de données que le cache de contenu a transférées pendant la période considérée. Si cette valeur n’est pas égale à zéro, le cache de contenu fonctionne. | Somme des objets bytesFrom*To* | |||||||||
Octets transférés d’un cache pair | Somme des objets bytesFromPeerTo* | Quantité de données que le cache de contenu a téléchargée auprès de n’importe lequel de ses caches de contenu pairs pendant la période considérée. | |||||||||
Octets transférés d’un cache parent | Somme des objets bytesFromParentTo* | Quantité de données que le cache de contenu a téléchargée auprès de n’importe lequel de ses caches de contenu parents pendant la période considérée. | |||||||||
Octets transférés de la mémoire | Somme des objets bytesFromCacheTo* | Quantité de données que le cache de contenu a transférées de sa mémoire pendant la période considérée. Plus cette valeur est proche du nombre d’octets transférés, plus le cache de contenu est utile. | |||||||||
Octets transférés du point d’origine | Somme des objets bytesFromOriginTo* | Quantité de données que le cache de contenu a téléchargées via Internet pendant la période considérée. | |||||||||
Octets transférés vers un cache enfant | Somme des objets bytesFrom*ToChild | Quantité de données que le cache de contenu a transférées vers n’importe lequel de ses caches de contenu enfants pendant la période considérée. | |||||||||
Octets transférés vers un cache pair | Somme des objets bytesFrom*ToPeer | Quantité de données que le cache de contenu a transférées vers n’importe lequel de ses caches de contenu pairs pendant la période considérée. | |||||||||
Octets transférés vers un client | Somme des objets bytesFrom*ToClient | Quantité de données que le cache de contenu a transférées vers les appareils Apple client pendant la période considérée. |
Obtention des données relatives à la pression exercée sur la mémoire cache
Vous pouvez vérifier à quel point les besoins d’espace de stockage supplémentaire du cache de contenu étaient urgents pendant la période considérée. Il est préférable d’exercer moins de pression sur la mémoire cache.
Moniteur d’activité calcule la pression exercée sur la mémoire 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 tout autre scénario
Moniteur d’activité combine également les éléments ci-dessus comme suit, pour entre autres calculer les valeurs sur un intervalle de temps plus long qu’une période.
Pour les comptes d’octets, d’importations, de demandes ou de réponses, il les additionne pour l’intervalle de temps.
Pour la pression exercée sur la mémoire cache, il calcule le maximum pour 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
}
}