Métricas del almacenamiento de contenido en caché en la Mac
La función Almacenamiento en caché almacena métricas en la siguiente carpeta:
/Biblioteca/Application Support/Apple/AssetCache/Metrics.
Las métricas no se mueven con el contenido de la caché, sino que siempre se almacenan en esta ubicación. Por ejemplo, si mueves la caché de:
/Library/Application Support/Apple/AssetCache/Data
a
/Volúmenes/Datos/Biblioteca/Application Support/Apple/AssetCache/Data
las métricas continúan almacenadas en
/Biblioteca/Application Support/Apple/AssetCache/Metrics
Si alguna vez se ha usado la función Contenido en caché en una Mac, esta carpeta contiene un archivo llamado Metrics.db, y puede contener uno o varios archivos con nombres similares. Estos archivos constituyen una base de datos SQLite que puedes leer.
El modelo de objetos CoreData que describe las métricas está disponible como la entidad Metric en /usr/libexec/AssetCache/AssetCache.momd.
Nota: aunque esta es una descripción del modelo de la versión 7, Apple puede cambiar este modelo, o usar una base de datos distinta de SQLite, en futuras versiones de macOS sin previo aviso. Esto puede requerir actualizaciones de cualquier script que hayas configurado para agregar datos de caché de contenido.
La caché de contenido:
agrega una nueva fila a la base de datos cada minuto mientras se ejecuta;
no agrega filas “todo cero” cuando está inactiva; simplemente omite agregar dichas filas;
no modifica las filas existentes;
borra periódicamente las filas cuando tienen más de 30 días de antigüedad;
Consejo: puedes cambiar el periodo de tiempo de los informes de 60 segundos cambiando la configuración avanzada MetricsInterval
, y puedes cambiar la antigüedad máxima de las filas almacenadas de 30 días cambiando la configuración avanzada MetricsMaxAge
.
Cada fila de la base de datos contiene las siguientes columnas. Todos los objetos son opcionales, excepto creationDate
.
Objeto | Descripción | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | La cantidad de datos que la caché de contenido descargó durante un periodo de reporte, pero que no pudo agregar a su caché. | ||||||||||
bytesFromCacheToChild | Cantidad de datos que la caché de contenido envió desde su caché a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
bytesFromCacheToClient | Cantidad de datos que la caché de contenido envió desde su caché a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
bytesFromCacheToPeer | Cantidad de datos que la caché de contenido envió desde su caché a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
bytesFromOriginToChild | Cantidad de datos que la caché de contenido descargó de Internet y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
bytesFromOriginToClient | Cantidad de datos que la caché de contenido descargó de Internet y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
bytesFromOriginToPeer | Cantidad de datos que la caché de contenido descargó de Internet y envió a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
bytesFromParentToChild | Cantidad de datos que la caché de contenido descargó de las cachés de contenido principales y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
bytesFromParentToClient | Cantidad de datos que la caché de contenido descargó de las cachés de contenido principales y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
bytesFromParentToPeer | Cantidad de datos que la caché de contenido descargó de las cachés de contenido principales y envió a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
bytesFromPeerToChild | Cantidad de datos que la caché de contenido recibió de las cachés de contenido del mismo nivel (pares) y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
bytesFromPeerToClient | Cantidad de datos que la caché de contenido recibió de las cachés de contenido del mismo nivel (pares) y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
bytesImportedByHTTP | Cantidad de datos que la caché de contenido recibió mediante el protocolo HTTP durante el periodo de reporte. | ||||||||||
bytesImportedByXPC | Cantidad de datos que la caché de contenido recibió mediante el protocolo XPC durante el periodo de reporte. | ||||||||||
bytesPurgedTotal | Cantidad de datos que la caché de contenido borró de su caché durante el periodo de reporte. Incluye bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Cantidad de datos que la caché de contenido borró de su caché durante el periodo de reporte, que había agregado a la caché hace menos de un día. | ||||||||||
bytesPurgedYoungerThan30Days | Cantidad de datos que la caché de contenido borró de su caché durante el periodo de reporte, que había agregado a la caché hace menos de 30 días. Incluye bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Cantidad de datos que la caché de contenido borró de su caché durante el periodo de reporte, que había agregado a la caché hace menos de 7 días. Incluye bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Fecha en la que se recopiló este objeto de métrica. Este elemento de métrica describe el rendimiento de la caché de contenido durante el periodo que termina en creationDate. | ||||||||||
importsByHTTP | Cantidad de solicitudes de carga que la caché de contenido recibió mediante el protocolo HTTP durante el periodo de reporte. | ||||||||||
importsByXPC | Cantidad de solicitudes de carga que la caché de contenido recibió mediante el protocolo XPC durante el periodo de reporte. | ||||||||||
period | Duración, en segundos, del periodo de reporte que termina en creationDate. | ||||||||||
repliesFromCacheToChild | Cantidad de respuestas que la caché de contenido envió desde su caché a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
repliesFromCacheToClient | Cantidad de respuestas que la caché de contenido envió desde su caché a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
repliesFromCacheToPeer | Cantidad de respuestas que la caché de contenido envió desde su caché a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
repliesFromOriginToChild | Cantidad de respuestas que la caché de contenido descargó de Internet y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
repliesFromOriginToClient | Cantidad de respuestas que la caché de contenido descargó de Internet y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
repliesFromOriginToPeer | Cantidad de respuestas que la caché de contenido descargó de Internet y envió a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
repliesFromParentToChild | Cantidad de respuestas que la caché de contenido descargó de las cachés de contenido principales y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
repliesFromParentToClient | Cantidad de respuestas que la caché de contenido descargó de las cachés de contenido principales y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
repliesFromParentToPeer | Cantidad de respuestas que la caché de contenido descargó de las cachés de contenido principales y envió a las cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
repliesFromPeerToChild | Cantidad de respuestas que la caché de contenido recibió de las cachés de contenido del mismo nivel (pares) y envió a las cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
repliesFromPeerToClient | Cantidad de respuestas que la caché de contenido recibió de las cachés de contenido del mismo nivel (pares) y envió a los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
requestsFromChild | Cantidad de solicitudes de descarga que la caché de contenido recibió de cachés de contenido secundarias durante el periodo de reporte. | ||||||||||
requestsFromClient | Cantidad de solicitudes de descarga que la caché de contenido recibió de los dispositivos Apple del cliente durante el periodo de reporte. | ||||||||||
requestsFromPeer | Cantidad de solicitudes de descarga que la caché de contenido recibió de cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | ||||||||||
requestsRejectedForNoSpace | Cantidad de solicitudes de descarga que la caché de contenidos rechazó durante el periodo de reporte debido a la alta presión de la caché (con el código de respuesta HTTP 503, Servicio no disponible). |
Agrupar resultados
Puede resultarte útil agrupar algunos de los elementos anteriores. Aquí tienes algunas sugerencias. Todo el contenido está basado en números enteros.
Contenido | Objetos agrupados | Descripción | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bytes cargados | La suma de bytesImportedBy* | Cantidad de datos cargados mediante la caché de contenidos durante el periodo de reporte. | |||||||||
Bytes descargados | bytesFrom <Origin,Parent,Peer>To | Cantidad de datos que la caché de contenido descargó de Internet o de cachés principales o pares durante el periodo de reporte. | |||||||||
Bytes enviados | Cantidad total de datos que la caché de contenido envió durante el periodo de reporte. Cuando este valor es no-cero, la caché de contenido está funcionando. | La suma de bytesFrom*To* | |||||||||
Bytes enviados a caché par | La suma de bytesFrom*ToPeer | Cantidad de datos que la caché de contenido envió a cualquiera de sus cachés de contenido del mismo nivel (pares) durante el periodo de reporte. | |||||||||
Bytes enviados a caché secundaria | La suma de bytesFrom*ToChild | Cantidad de datos que la caché de contenido envió a cualquiera de sus cachés de contenido secundarias durante el periodo de reporte. | |||||||||
Bytes enviados a cliente | La suma de bytesFrom*ToClient | Cantidad de datos que la caché de contenido envió a los dispositivos Apple del cliente durante el periodo de reporte. | |||||||||
Bytes enviados desde caché par | La suma de bytesFromPeerTo* | Cantidad de datos que la caché de contenido descargó desde cualquiera de sus cachés de contenido pares durante el periodo de reporte. | |||||||||
Bytes enviados desde caché principal | La suma de bytesFromParentTo* | Cantidad de datos que la caché de contenido descargó desde cualquiera de sus cachés de contenido principales durante el periodo de reporte. | |||||||||
Bytes enviados desde el origen | La suma de bytesFromOriginTo* | Cantidad de datos que la caché de contenido descargó de Internet durante el periodo de reporte. | |||||||||
Bytes enviados desde la caché | La suma de bytesFromCacheTo* | Cantidad de datos que la caché de contenido envió desde su caché durante el periodo de reporte. Entre más se acerca sea este valor al valor de Bytes enviados, mayor es la ayuda de la caché de contenido. |
Obtener datos de presión de la caché
Puedes revisar la urgencia con la que la caché de contenidos ha necesitado más espacio de almacenamiento durante el periodo de reporte. Una presión de caché baja es mejor.
A continuación se explica cómo Monitor de Actividad calcula la presión de la caché:
100% cuando requestsRejectedForNoSpace es mayor que 0
80% cuando bytesPurgedYoungerThan1Day es mayor que 0
60% cuando bytesPurgedYoungerThan7Days es mayor que 0
40% cuando bytesPurgedYoungerThan30Days es mayor que 0
20% cuando bytesPurgedTotal es mayor que 0
0% en los demás casos
Monitor de Actividad también coteja los elementos anteriores de la siguiente manera, por ejemplo, para calcular los valores a lo largo de un intervalo de tiempo superior a un periodo.
Para los recuentos de bytes, recuentos de importaciones, recuentos de solicitudes o recuentos de respuestas, súmalos a lo largo del intervalo de tiempo.
Para la presión de la caché, calcula el máximo a lo largo del 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
}
}