Datos del almacenamiento en caché de contenido en el Mac
El almacenamiento en caché de contenido guarda los datos en la siguiente carpeta:
/Library/Application Support/Apple/AssetCache/Metrics.
Las métricas no se trasladan con el contenido almacenado en caché; en vez de eso, siempre se guardan en esta ubicación. Por ejemplo, si trasladas la caché de:
/Library/Application Support/Apple/AssetCache/Data
a
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
las métricas todavía están guardadas en
/Library/Application Support/Apple/AssetCache/Metrics
Si se ha usado alguna vez “Almacenamiento en caché de contenido” en un Mac, esta carpeta contiene un archivo llamado “Metrics.db” y es posible que contenga uno o más archivos con nombres similares. Estos archivos constituyen una base de datos SQLite que puedes leer.
El modelo de objeto CoreData que describe las métricas está disponible como la entidad “Métrica” en /usr/libexec/AssetCache/AssetCache.momd.
Nota: Aunque aquí se describe un modelo de la versión 7, Apple puede cambiar este modelo (o usar una base de datos diferente a la SQLite) en las próximas versiones de macOS sin previo aviso. Es posible que se tengan que actualizar los scripts que hayas configurado para agregar los datos del almacenamiento de contenido en caché.
El almacenamiento de contenido en caché:
Añade una fila a la base de datos cada minuto, a medida que se ejecuta.
No añade filas que “solo contiene ceros” cuando está inactivo; simplemente omite la adición de dichas filas.
No modifica las filas existentes.
Elimina periódicamente las filas que tienen más de 30 días de antigüedad.
Consejo: Puedes cambiar el periodo de tiempo para la creación de informes de 60 segundos cambiando el ajuste avanzado MetricsInterval
. También puedes cambiar la antigüedad máxima de las filas guardadas de 30 días cambiando el ajuste avanzado MetricsMaxAge
.
Cada fila de la base de datos contiene las siguientes columnas. Cada objeto es opcional, excepto la fecha de creationDate
.
Objeto | Descripción | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Cantidad de datos que la caché de contenido ha descargado durante el periodo de creación de informes pero no ha podido añadir a su caché. | ||||||||||
bytesFromCacheToChild | Cantidad de datos que la caché de contenido ha proporcionado desde su caché a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
bytesFromCacheToClient | Cantidad de datos que la caché de contenido ha proporcionado desde su caché a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
bytesFromCacheToPeer | Cantidad de datos que la caché de contenido ha proporcionado desde su caché a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
bytesFromOriginToChild | Cantidad de datos que la caché de contenido ha descargado a través de internet y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
bytesFromOriginToClient | Cantidad de datos que la caché de contenido ha descargado a través de internet y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
bytesFromOriginToPeer | Cantidad de datos que la caché de contenido ha descargado a través de internet y proporcionado a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
bytesFromParentToChild | Cantidad de datos que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
bytesFromParentToClient | Cantidad de datos que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
bytesFromParentToPeer | Cantidad de datos que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
bytesFromPeerToChild | Cantidad de datos que la caché de contenido ha recibido desde las cachés de contenido de los pares y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
bytesFromPeerToClient | Cantidad de datos que la caché de contenido ha recibido desde las cachés de contenido de los pares y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
bytesImportedByHTTP | Cantidad de datos que la caché de contenido ha recibido a través de HTTP durante el periodo de creación de informes. | ||||||||||
bytesImportedByXPC | Cantidad de datos que la caché de contenido ha recibido a través de XPC durante el periodo de creación de informes. | ||||||||||
bytesPurgedTotal | Cantidad de datos que la caché de contenido ha purgado de su caché durante el periodo de creación de informes. Incluye bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Cantidad de datos que la caché de contenido ha purgado de su caché durante el periodo de creación de informes, y que se ha añadido a la caché hace menos de un día. | ||||||||||
bytesPurgedYoungerThan30Days | Cantidad de datos que la caché de contenido ha purgado de su caché durante el periodo de creación de informes, y que se ha añadido a la caché hace menos de 30 días. Incluye bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Cantidad de datos que la caché de contenido ha purgado de su caché durante el periodo de creación de informes, y que se ha añadido a la caché hace menos de 7 días. Incluye bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Fecha en que se recopiló este objeto de métricas. Este ítem de las métricas describe el rendimiento de la caché de contenido durante el periodo que finaliza en la fecha de creationDate. | ||||||||||
importsByHTTP | Número de solicitudes de carga que la caché de contenido ha recibido a través de HTTP durante el periodo de creación de informes. | ||||||||||
importsByXPC | Número de solicitudes de carga que la caché de contenido ha recibido a través de XPC durante el periodo de creación de informes. | ||||||||||
period | Duración, en segundos, del periodo de creación de informes que finaliza en la fecha de creationDate. | ||||||||||
repliesFromCacheToChild | Número de respuestas que la caché de contenido ha proporcionado desde su caché a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
repliesFromCacheToClient | Número de respuestas que la caché de contenido ha proporcionado desde su caché a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
repliesFromCacheToPeer | Número de respuestas que la caché de contenido ha proporcionado desde su caché a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
repliesFromOriginToChild | Número de respuestas que la caché de contenido ha descargado a través de internet y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
repliesFromOriginToClient | Número de respuestas que la caché de contenido ha descargado a través de internet y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
repliesFromOriginToPeer | Número de respuestas que la caché de contenido ha descargado a través de internet y proporcionado a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
repliesFromParentToChild | Número de respuestas que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
repliesFromParentToClient | Número de respuestas que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
repliesFromParentToPeer | Número de respuestas que la caché de contenido ha descargado desde las cachés de contenido principales y proporcionado a cualquiera de sus cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
repliesFromPeerToChild | Número de respuestas que la caché de contenido ha recibido desde las cachés de contenido de los pares y proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
repliesFromPeerToClient | Número de respuestas que la caché de contenido ha recibido desde las cachés de contenido de los pares y proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
requestsFromChild | Número de solicitudes de descarga que la caché de contenido ha recibido de cachés de contenido secundarias durante el periodo de creación de informes. | ||||||||||
requestsFromClient | Número de solicitudes de descarga que la caché de contenido ha recibido de los dispositivos Apple cliente durante el periodo de creación de informes. | ||||||||||
requestsFromPeer | Número de solicitudes de descarga que la caché de contenido ha recibido de cachés de contenido de los pares durante el periodo de creación de informes. | ||||||||||
requestsRejectedForNoSpace | Número de solicitudes de descarga que la caché de contenido ha rechazado durante el periodo de creación de informes debido a una gran presión en la caché (con el código 503 de respuesta HTTP, “Servicio no disponible”). |
Agrupar resultados
Puede que te resulte útil agrupar algunos de los ítems anteriores. A continuación se indican algunas sugerencias. Todo el contenido se basa en números enteros.
Contenido | Objetos agrupados | Descripción | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bytes cargados | Suma de bytesImportedBy* | Cantidad de datos cargados a través de la caché de contenido durante el periodo de creación de informes. | |||||||||
Bytes descargados | bytesFrom <Origin,Parent,Peer>To | Cantidad de datos que la caché de contenido ha descargado, ya sea a través de internet o desde los pares o elementos principales durante el periodo de creación de informes. | |||||||||
Bytes proporcionados | Cantidad total de datos que la caché de contenido ha proporcionado durante el periodo de creación de informes. Cuando este valor es diferente a cero, la caché de contenido funciona correctamente. | Suma de bytesFrom*To* | |||||||||
Bytes proporcionados al cliente | Suma de bytesFrom*ToClient | Cantidad de datos que la caché de contenido ha proporcionado a los dispositivos Apple cliente durante el periodo de creación de informes. | |||||||||
Bytes proporcionados al elemento secundario | Suma de bytesFromPeerTo* | Cantidad de datos que la caché de contenido ha proporcionado a cualquiera de sus cachés de contenido secundarias durante el periodo de creación de informes. | |||||||||
Bytes proporcionados al par | Suma de bytesFrom*ToPeer | Cantidad de datos que la caché de contenido ha proporcionado a cualquiera de las cachés de contenido de los pares durante el periodo de creación de informes. | |||||||||
Bytes proporcionados desde el origen | Suma de bytesFromOriginTo* | Cantidad de datos que la caché de contenido ha descargado a través de internet durante el periodo de creación de informes. | |||||||||
Bytes proporcionados desde el par | Suma de bytesFromPeerTo* | Cantidad de datos que la caché de contenido ha descargado desde cualquiera de las cachés de contenido de los pares durante el periodo de creación de informes. | |||||||||
Bytes proporcionados desde la caché | Suma de bytesFromCacheTo* | Cantidad de datos que la caché de contenido ha proporcionado desde su caché durante el periodo de creación de informes. Cuanto más cerca está este valor al valor de “Bytes proporcionados”, más ha ayudado la caché de contenido. | |||||||||
Bytes proporcionados desde los elementos principales | Suma de bytesFromParentTo* | Cantidad de datos que la caché de contenido ha descargado desde cualquiera de sus cachés de contenido principales durante el periodo de creación de informes. |
Obtener los datos de presión de caché
Puedes revisar la urgencia con la que la caché de contenido ha necesitado más espacio de almacenamiento durante el periodo de creación de informes. Cuanto menor sea el valor de presión de caché, mejor.
Monitor de Actividad calcula la presión de caché como se indica a continuación:
100 % cuando requestsRejectedForNoSpace > 0
80 % cuando bytesPurgedYoungerThan1Day > 0
60 % cuando bytesPurgedYoungerThan7Days > 0
40 % cuando bytesPurgedYoungerThan30Days > 0
20 % cuando bytesPurgedTotal > 0
0 % en cualquier otro caso
Monitor de Actividad también intercala los ítems anteriores como se indica a continuación para, por ejemplo, calcular valores durante un intervalo de tiempo más largo que un periodo.
Para recuentos de bytes, recuentos de importaciones, recuentos de solicitudes o recuentos de respuestas, súmalos durante el intervalo de tiempo.
Para la presión de caché, calcula el máximo durante el intervalo de tiempo.
Código de ejemplo para leer la base de datos de métricas
#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
}
}