Métricas do cache de conteúdo no Mac
O cache de conteúdo armazena as métricas na pasta a seguir:
/Library/Application Support/Apple/AssetCache/Metrics.
As métricas não se movem com o cache de conteúdo; em vez disso, elas são sempre armazenadas neste local. Por exemplo, se você mover o cache de:
/Biblioteca/Application Support/Apple/AssetCache/Data
para
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
as métricas ainda ficam armazenadas em
/Library/Application Support/Apple/AssetCache/Metrics
Se o cache de conteúdo já tiver sido usado em um Mac, esta pasta contém um arquivo chamado Metrics.db e pode conter um ou mais arquivos com nomes semelhantes. Estes arquivos compõem um banco de dados SQLite que você pode ler.
O modelo de objeto CoreData que descreve as métricas está disponível como a entidade “Metric” em /usr/libexec/AssetCache/AssetCache.momd.
Nota: embora esta seja uma descrição do modelo da versão 7, a Apple pode alterá-lo, ou usar um banco de dados diferente do SQLite, em versões futuras do macOS sem aviso prévio. Isso pode exigir que os scripts que você configurou sejam atualizados para agregar dados de cache de conteúdo.
O cache de conteúdo:
Adiciona uma nova linha ao banco de dados a cada minuto durante a execução
Não adiciona linhas “zeradas” quando inativo. Simplesmente não as adiciona
Não modifica linhas existentes
Exclui periodicamente as linhas com mais de 30 dias
Dica: você pode alterar a configuração avançada MetricsInterval
para mudar o período de relatório de 60 segundos e a configuração avançada MetricsMaxAge
para mudar o tempo máximo das linhas armazenadas de 30 dias.
Cada linha do banco de dados contém as colunas a seguir. Com exceção de creationDate
, todos os objetos são opcionais.
Objeto | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Quantidade de dados que o cache de conteúdo baixou durante o período de relatório, mas não pôde adicionar ao cache. | ||||||||||
bytesFromCacheToChild | Quantidade de dados servidos pelo cache de conteúdo do próprio cache para caches de conteúdo secundários durante o período de relatório. | ||||||||||
bytesFromCacheToClient | Quantidade de dados servidos pelo cache de conteúdo do próprio cache para dispositivos Apple clientes durante o período de relatório. | ||||||||||
bytesFromCacheToPeer | Quantidade de dados servidos pelo cache de conteúdo do próprio cache para caches de conteúdo pares durante o período de relatório. | ||||||||||
bytesFromOriginToChild | Quantidade de dados baixados da internet e servidos pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
bytesFromOriginToClient | Quantidade de dados baixados da internet e servidos pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
bytesFromOriginToPeer | Quantidade de dados baixados da internet e servidos pelo cache de conteúdo para caches de conteúdo pares durante o período de relatório. | ||||||||||
bytesFromParentToChild | Quantidade de dados baixados de caches de conteúdo principais e servidos pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
bytesFromParentToClient | Quantidade de dados baixados de caches de conteúdo principais e servidos pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
bytesFromParentToPeer | Quantidade de dados baixados de caches de conteúdo principais e servidos pelo cache de conteúdo para caches de conteúdo pares durante o período de relatório. | ||||||||||
bytesFromPeerToChild | Quantidade de dados recebidos de caches de conteúdo pares e servidos pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
bytesFromPeerToClient | Quantidade de dados recebidos de caches de conteúdo pares e servidos pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
bytesImportedByHTTP | Quantidade de dados recebidos por HTTP pelo cache de conteúdo durante o período de relatório. | ||||||||||
bytesImportedByXPC | Quantidade de dados recebidos por XPC pelo cache de conteúdo durante o período de relatório. | ||||||||||
bytesPurgedTotal | Quantidade de dados que o cache de conteúdo depurou do próprio cache durante o período de relatório. Inclui bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Quantidade de dados que o cache de conteúdo depurou do próprio cache durante o período de relatório, e que tinha adicionado ao cache menos de um dia atrás. | ||||||||||
bytesPurgedYoungerThan30Days | Quantidade de dados que o cache de conteúdo depurou do próprio cache durante o período de relatório, e que tinha adicionado ao cache menos de 30 dias atrás. Inclui bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Quantidade de dados que o cache de conteúdo depurou do próprio cache durante o período de relatório, e que tinha adicionado ao cache menos de sete dias atrás. Inclui bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Data em que este objeto de métrica foi coletado. Este item de métrica descreve o desempenho do cache de conteúdo durante o período que termina em creationDate. | ||||||||||
importsByHTTP | Número de solicitações de envio recebidas pelo cache de conteúdo via HTTP durante o período de relatório. | ||||||||||
importsByXPC | Número de solicitações de envio recebidas pelo cache de conteúdo via XPC durante o período de relatório. | ||||||||||
period | Duração, em segundos, do período de relatório que termina em creationDate. | ||||||||||
repliesFromCacheToChild | Número de respostas servidas pelo cache de conteúdo do próprio cache para caches de conteúdo secundários durante o período de relatório. | ||||||||||
repliesFromCacheToClient | Número de respostas servidas pelo cache de conteúdo do próprio cache para dispositivos Apple clientes durante o período de relatório. | ||||||||||
repliesFromCacheToPeer | Número de respostas servidas pelo cache de conteúdo do próprio cache para caches de conteúdo pares durante o período de relatório. | ||||||||||
repliesFromOriginToChild | Número de respostas baixadas da internet e servidas pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
repliesFromOriginToClient | Número de respostas baixadas da internet e servidas pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
repliesFromOriginToPeer | Número de respostas baixadas da internet e servidas pelo cache de conteúdo para caches de conteúdo pares durante o período de relatório. | ||||||||||
repliesFromParentToChild | Número de respostas baixadas de caches de conteúdo principais e servidas pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
repliesFromParentToClient | Número de respostas baixadas de caches de conteúdo principais e servidas pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
repliesFromParentToPeer | Número de respostas baixadas de caches de conteúdo principais e servidas pelo cache de conteúdo para caches de conteúdo pares durante o período de relatório. | ||||||||||
repliesFromPeerToChild | Número de respostas recebidas de caches de conteúdo pares e servidas pelo cache de conteúdo para caches de conteúdo secundários durante o período de relatório. | ||||||||||
repliesFromPeerToClient | Número de respostas recebidas de caches de conteúdo pares e servidas pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | ||||||||||
requestsFromChild | Número de solicitações de download de caches de conteúdo secundários recebidas pelo cache de conteúdo durante o período de relatório. | ||||||||||
requestsFromClient | Número de solicitações de download de cache de conteúdo recebidas de dispositivos Apple clientes durante o período de relatório. | ||||||||||
requestsFromPeer | Número de solicitações de download de caches de conteúdo pares recebidas pelo cache de conteúdo durante o período de relatório. | ||||||||||
requestsRejectedForNoSpace | Número de solicitações de download que o cache de conteúdo rejeitou durante o período de relatório devido à alta pressão do cache (com o código de resposta HTTP 503, Serviço Indisponível). |
Resultados de grupo
Talvez seja útil agrupar alguns dos itens acima. Abaixo, encontram-se algumas sugestões. Todo o conteúdo é baseado em inteiros.
Conteúdo | Objetos agrupados | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bytes baixados | bytesFrom <Origin,Parent,Peer>To | Quantidade de dados que o cache de conteúdo baixou da internet ou de caches de conteúdo pares ou principais durante o período de relatório. | |||||||||
Bytes enviados | Soma de bytesImportedBy* | Quantidade de dados enviados pelo cache de conteúdo durante o período de relatório. | |||||||||
Bytes servidos | Quantidade total de dados servidos pelo cache de conteúdo durante o período de relatório. Quando este valor é diferente de zero, o cache de conteúdo está funcionando. | Soma de bytesFrom*To* | |||||||||
Bytes servidos a cliente | Soma de bytesFrom*ToClient | Quantidade de dados servidos pelo cache de conteúdo para dispositivos Apple clientes durante o período de relatório. | |||||||||
Bytes servidos a secundário | Soma de bytesFrom*ToChild | Quantidade de dados que o cache de conteúdo serviu para qualquer um dos seus caches de conteúdo secundários durante o período de relatório. | |||||||||
Bytes servidos de par | Soma de bytesFromPeerTo* | Quantidade de dados que o cache de conteúdo baixou de qualquer cache de conteúdo par durante o período de relatório. | |||||||||
Bytes servidos de principal | Soma de bytesFromParentTo* | Quantidade de dados que o cache de conteúdo baixou de qualquer cache de conteúdo principal durante o período de relatório. | |||||||||
Bytes servidos do cache | Soma de bytesFromCacheTo* | Quantidade de dados servidos pelo cache de conteúdo do seu cache durante o período de relatório. Quanto mais próximo este valor está do valor de Bytes servidos, maior é a ajuda do cache de conteúdo. | |||||||||
Bytes servidos para par | Soma de bytesFrom*ToPeer | Quantidade de dados que o cache de conteúdo serviu para qualquer um dos seus caches de conteúdo pares durante o período de relatório. | |||||||||
Dados servidos da origem | Soma de bytesFromOriginTo* | Quantidade de dados que o cache de conteúdo baixou da internet durante o período de relatório. |
Obter dados de pressão do cache
Você pode analisar com que urgência o cache de conteúdo precisou de mais espaço de armazenamento durante o período de relatório. Uma pressão do cache mais baixa é melhor.
O Monitor de Atividade calcula a pressão de cache da seguinte maneira:
100% quando requestsRejectedForNoSpace > 0
80% quando bytesPurgedYoungerThan1Day > 0
60% quando bytesPurgedYoungerThan7Days > 0
40% quando bytesPurgedYoungerThan30Days > 0
20% quando bytesPurgedTotal > 0
0% em outros casos
O Monitor de Atividade também agrupa os itens acima da maneira descrita a seguir para, por exemplo, calcular valores em um intervalo de tempo superior a um período.
Para contagens de bytes, contagens de importação, contagens de solicitação ou contagens de resposta, soma-os ao longo do intervalo de tempo.
Para pressão do cache, calcule o máximo no intervalo de tempo.
Exemplo de código para ler o banco de dados 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
}
}