Métricas da cache de conteúdo no Mac
A cache de conteúdo armazena as métricas na seguinte pasta:
/Library/Application Support/Apple/AssetCache/Metrics.
As métricas não se movem com o conteúdo em cache; em vez disso, são armazenadas neste local. Por exemplo, se mover a cache de:
/Library/Application Support/Apple/AssetCache/Data
para
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
as métricas ainda estão armazenadas
/Library/Application Support/Apple/AssetCache/Metrics
Se a cache de conteúdo nunca tiver sido usada num Mac, esta pasta contém um ficheiro denominado Metrics.db e pode incluir um ou mais outros ficheiros com nomes semelhantes. Esses ficheiros constituem uma base de dados SQLite que é possível ler.
O modelo de objeto CoreData que descreve a métrica está disponível como a entidade “Metric” em /usr/libexec/AssetCache/AssetCache.momd.
Nota: apesar de esta ser uma descrição do modelo da versão 7, a Apple pode alterar este modelo ou usar uma base de dados que não seja SQLite, em lançamentos futuros do macOS sem aviso. Isso pode necessitar de atualizações para quaisquer scripts que tenha configurado para agregar os dados de conteúdo da cache.
A cache de conteúdo:
adiciona uma nova linha à base de dados a cada minuto que é executada;
não adiciona linhas “tudo a zero” quando está inativa; simplesmente ignora a adição de tais linhas;
não modifica linhas existentes;
apaga periodicamente as linhas quando têm mais de 30 dias.
Dica: pode alterar o período de tempo de relatório de 60 segundos alterando a definição avançada MetricsInterval
e pode alterar a idade máxima das linhas armazenadas de 30 dias alterando a definição avançada MetricsMaxAge
.
Cada linha na base de dados contém as seguintes colunas. Cada objeto é opcional, exceto creationDate
.
Objeto | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Quantidade de dados que a cache de conteúdo descarregou durante o período reportado, mas que não conseguiu adicionar à cache. | ||||||||||
bytesFromCacheToChild | Quantidade de dados que a cache de conteúdo serviu da cache a caches de conteúdo filho durante o período reportado. | ||||||||||
bytesFromCacheToClient | Quantidade de dados que a cache de conteúdo serviu da cache a dispositivos Apple clientes durante o período reportado. | ||||||||||
bytesFromCacheToPeer | Quantidade de dados que a cache de conteúdo serviu da cache a caches de conteúdo peers durante o período reportado. | ||||||||||
bytesFromOriginToChild | Quantidade de dados que a cache de conteúdo descarregou da internet e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
bytesFromOriginToClient | Quantidade de dados que a cache de conteúdo descarregou da internet e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
bytesFromOriginToPeer | Quantidade de dados que a cache de conteúdo descarregou da internet e serviu a caches de conteúdo peers durante o período reportado. | ||||||||||
bytesFromParentToChild | Quantidade de dados que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
bytesFromParentToClient | Quantidade de dados que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
bytesFromParentToPeer | Quantidade de dados que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a caches de conteúdo peers durante o período reportado. | ||||||||||
bytesFromPeerToChild | Quantidade de dados que a cache de conteúdo recebeu de caches de conteúdo peers e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
bytesFromPeerToClient | Quantidade de dados que a cache de conteúdo recebeu de caches de conteúdo peers e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
bytesImportedByHTTP | Quantidade de dados que a cache de conteúdo recebeu através de HTTP durante o período reportado. | ||||||||||
bytesImportedByXPC | Quantidade de dados que a cache de conteúdo recebeu através de XPC durante o período reportado. | ||||||||||
bytesPurgedTotal | Quantidade de dados que a cache de conteúdo limpou da cache durante o período reportado. Inclui bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Quantidade de dados que a cache de conteúdo limpou da cache durante o período reportado, que tinha adicionado à cache há menos de um dia. | ||||||||||
bytesPurgedYoungerThan30Days | Quantidade de dados que a cache de conteúdo limpou da cache durante o período reportado, que tinha adicionado à cache há menos de 30 dias. Inclui bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Quantidade de dados que a cache de conteúdo limpou da cache durante o período reportado, que tinha adicionado à cache há menos de 7 dias. Inclui bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Data em que o objeto das métricas foi recolhido. Este elemento das métricas descreve o desempenho da cache de conteúdo durante o fim do período na creationDate. | ||||||||||
importsByHTTP | Número de pedidos de envio que a cache de conteúdo recebeu através de HTTP durante o período reportado. | ||||||||||
importsByXPC | Número de pedidos de envio que a cache de conteúdo recebeu através de XPC durante o período reportado. | ||||||||||
period | A duração, em segundos, do período reportado que termina na creationDate. | ||||||||||
repliesFromCacheToChild | Número de respostas que a cache de conteúdo serviu da sua cache a caches de conteúdo filho durante o período reportado. | ||||||||||
repliesFromCacheToClient | Número de respostas que a cache de conteúdo serviu da sua cache a dispositivos Apple clientes durante o período reportado. | ||||||||||
repliesFromCacheToPeer | Número de respostas que a cache de conteúdo serviu da sua cache a caches de conteúdo peers durante o período reportado. | ||||||||||
repliesFromOriginToChild | Número de respostas que a cache de conteúdo descarregou da internet e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
repliesFromOriginToClient | Número de respostas que a cache de conteúdo descarregou da internet e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
repliesFromOriginToPeer | Número de respostas que a cache de conteúdo descarregou da internet e serviu a caches de conteúdo peers durante o período reportado. | ||||||||||
repliesFromParentToChild | Número de respostas que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
repliesFromParentToClient | Número de respostas que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
repliesFromParentToPeer | Número de respostas que a cache de conteúdo descarregou de caches de conteúdo pai e serviu a caches de conteúdo peers durante o período reportado. | ||||||||||
repliesFromPeerToChild | Número de respostas que a cache de conteúdo recebeu de caches de conteúdo peers e serviu a caches de conteúdo filho durante o período reportado. | ||||||||||
repliesFromPeerToClient | Número de respostas que a cache de conteúdo recebeu de caches de conteúdo peers e serviu a dispositivos Apple clientes durante o período reportado. | ||||||||||
requestsFromChild | Número de pedidos de descarga que a cache de conteúdo recebeu de caches de conteúdo filho durante o período reportado. | ||||||||||
requestsFromClient | Número de pedidos de descarga que a cache de conteúdo recebeu de dispositivos Apple clientes durante o período reportado. | ||||||||||
requestsFromPeer | Número de pedidos de descarga que a cache de conteúdo recebeu de caches de conteúdo peers durante o período reportado. | ||||||||||
requestsRejectedForNoSpace | O número de pedidos de descarga que a cache de conteúdo rejeitou durante o período reportado devido a pressão alta na cache (com código de resposta HTTP 503, serviço indisponível). |
Agrupar resultados
Poderá achar útil agrupar alguns dos elementos acima. Eis algumas sugestões. Todo o conteúdo é baseado em números inteiros.
Conteúdo | Objetos agrupados | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bytes descarregados | bytesFrom bytesFrom<Origin,Parent,Peer>To | Quantidade de dados que a cache de conteúdo descarregou através da internet ou de peers ou pais durante o período reportado. | |||||||||
Bytes enviados | Soma de bytesImportedBy* | Quantidade de dados carregados através da cache de conteúdo durante o período reportado. | |||||||||
Bytes servidos | Quantidade total de dados que a cache de conteúdo serviu através de XPC durante o período reportado. Quando este valor não é zero, a cache de conteúdo está a funcionar. | Soma de bytesFrom*To* | |||||||||
Bytes servidos da cache | Soma de bytesFromCacheTo* | Quantidade de dados que a cache de conteúdo serviu da cache durante o período reportado. Quanto mais próximo este valor estiver do valor de Bytes servidos, mais útil será a cache de conteúdo. | |||||||||
Bytes servidos da origem | Soma de bytesFromOriginTo* | Quantidade de dados que a cache de conteúdo descarregou da internet durante o período reportado. | |||||||||
Bytes servidos do pai | Soma de bytesFromParentTo* | Quantidade de dados que a cache de conteúdo descarregou de quaisquer caches de conteúdo pai durante o período reportado. | |||||||||
Bytes servidos do peer | Soma de bytesFromPeerTo* | Quantidade de dados que a cache de conteúdo descarregou de quaisquer caches de conteúdo peers durante o período reportado. | |||||||||
Bytes servidos para o cliente | Soma de bytesFrom*ToClient | Quantidade de dados que a cache de conteúdo serviu a dispositivos Apple clientes durante o período reportado. | |||||||||
Bytes servidos para o filho | Soma de bytesFrom*ToChild | Quantidade de dados que a cache de conteúdo serviu quaisquer caches de conteúdo filho durante o período reportado. | |||||||||
Bytes servidos para o peer | Soma de bytesFrom*ToPeer | Quantidade de dados que a cache de conteúdo serviu quaisquer caches de conteúdo peers durante o período reportado. |
Obter dados de pressão da cache
É possível consultar a urgência com que a cache de conteúdo necessita de mais espaço de armazenamento durante o período reportado. Quanto mais baixa for a pressão melhor.
O Monitor de Atividade calcula a pressão da cache da seguinte forma:
100% quando requestsRejectedForNoSpace > 0
80% quando bytesPurgedYoungerThan1Day > 0
60% quando bytesPurgedYoungerThan7Days > 0
40% quando bytesPurgedYoungerThan30Days > 0
20% quando bytesPurgedTotal > 0
Caso contrário, 0%
O Monitor de Atividade também agrupa os elementos acima como se segue, por exemplo, para calcular os valores ao longo de um intervalo de tempo mais longo do que um período.
Para as contagens de bytes, contagens de importações, contagens de pedidos ou contagens de respostas, efetue a sua soma ao longo do intervalo de tempo.
Para a pressão da cache, calcula o máximo ao longo do intervalo de tempo.
Código de amostra para leitura da base de dados das 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
}
}