Метрики кешування вмісту на Mac
Кешування вмісту зберігає метрики в такій папці:
/Library/Application Support/Apple/AssetCache/Metrics.
Метрики не переміщуються з кешованим вмістом, а натомість завжди зберігаються в цьому місці. Наприклад, якщо перемістити кеш з
/Library/Application Support/Apple/AssetCache/Data
до
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
метрики все одно залишаться в
/Library/Application Support/Apple/AssetCache/Metrics
Якщо кешування вмісту колись використовувалося на Mac, у цій папці міститься файл з іменем Metrics.db та можуть міститися ще один чи кілька файлів зі схожими іменами. Ці файли є базою даних SQLite, яку ви можете прочитати.
Об’єктна модель CoreData, яка описує метрики, доступна як сутність «Metric» у /usr/libexec/AssetCache/AssetCache.momd.
Примітка. Хоча тут подано опис моделі версії 7, Apple у наступних версіях macOS може без попередження змінити цю модель або використати іншу базу даних, ніж SQLite. Це може спричинити необхідність оновити скрипти, які ви конфігурували для збирання даних кешування вмісту.
Кеш вмісту:
Додає новий рядок у базу даних щохвилини під час роботи.
Не додає рядки «з нулями» під час простою, а просто пропускає процедуру додавання рядків.
Не змінює наявні рядки.
Періодично видаляє рядки, яким понад 30 днів.
Порада. Ви можете змінити період звітування (вибрати значення відмінне від 60 секунд), змінивши розширений параметр MetricsInterval
, а також можете змінити максимальний вік збережуваних рядків (вибрати значення відмінне від 30 днів), змінивши розширений параметр MetricsMaxAge
.
Кожен рядок у базі даних містить наведені нижче стовпці. Усі об’єкти є необов’язковими, окрім creationDate
.
Об’єкт | Опис | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Обсяг даних, викачаних кешем вмісту протягом періоду звітування, які не було додано в його кеш. | ||||||||||
bytesFromCacheToChild | Обсяг даних, які кеш вмісту надав зі свого кешу дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromCacheToClient | Обсяг даних, які кеш вмісту надав зі свого кешу клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
bytesFromCacheToPeer | Обсяг даних, які кеш вмісту надав зі свого кешу вузловим кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromOriginToChild | Обсяг даних, які кеш вмісту викачав з інтернету й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromOriginToClient | Обсяг даних, які кеш вмісту викачав з інтернету й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
bytesFromOriginToPeer | Обсяг даних, які кеш вмісту викачав з інтернету й надав вузловим кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromParentToChild | Обсяг даних, які кеш вмісту викачав із батьківських кешів вмісту й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromParentToClient | Обсяг даних, які кеш вмісту викачав із батьківських кешів вмісту й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
bytesFromParentToPeer | Обсяг даних, які кеш вмісту викачав із батьківських кешів вмісту й надав вузловим кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromPeerToChild | Обсяг даних, які кеш вмісту отримав від вузлових кешів вмісту й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
bytesFromPeerToClient | Обсяг даних, які кеш вмісту отримав від вузлових кешів вмісту й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
bytesImportedByHTTP | Обсяг даних, які кеш вмісту отримав через HTTP протягом періоду звітування. | ||||||||||
bytesImportedByXPC | Обсяг даних, які кеш вмісту отримав через XPC протягом періоду звітування. | ||||||||||
bytesPurgedTotal | Обсяг даних, які кеш вмісту вилучив зі свого кешу протягом періоду звітування. Включає bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Обсяг даних, які кеш вмісту вилучив зі свого кешу протягом періоду звітування, і які було додано в кеш менше ніж один день тому. | ||||||||||
bytesPurgedYoungerThan30Days | Обсяг даних, які кеш вмісту вилучив зі свого кешу протягом періоду звітування, і які було додано в кеш менше ніж 30 днів тому. Включає bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Обсяг даних, які кеш вмісту вилучив зі свого кешу протягом періоду звітування, і які було додано в кеш менше ніж 7 днів тому. Включає bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Дата збирання цього об’єкта метрики. Цей елемент метрики описує продуктивність кешування вмісту протягом періоду, що завершується в день, визначений об’єктом creationDate. | ||||||||||
importsByHTTP | Кількість запитів на закачування, які кеш вмісту отримав через HTTP протягом періоду звітування. | ||||||||||
importsByXPC | Кількість запитів на закачування, які кеш вмісту отримав через XPC протягом періоду звітування. | ||||||||||
period | Тривалість періоду звітування в секундах, який завершується в день, визначений об’єктом creationDate. | ||||||||||
repliesFromCacheToChild | Кількість відповідей, які кеш вмісту надав зі свого кешу дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromCacheToClient | Кількість відповідей, які кеш вмісту надав зі свого кешу клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
repliesFromCacheToPeer | Кількість відповідей, які кеш вмісту надав зі свого кешу вузловим кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromOriginToChild | Кількість відповідей, які кеш вмісту викачав з інтернету й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromOriginToClient | Кількість відповідей, які кеш вмісту викачав з інтернету й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
repliesFromOriginToPeer | Кількість відповідей, які кеш вмісту викачав з інтернету й надав вузловим кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromParentToChild | Кількість відповідей, які кеш вмісту викачав із батьківських кешів вмісту й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromParentToClient | Кількість відповідей, які кеш вмісту викачав із батьківських кешів вмісту й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
repliesFromParentToPeer | Кількість відповідей, які кеш вмісту викачав із батьківських кешів вмісту й надав вузловим кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromPeerToChild | Кількість відповідей, які кеш вмісту отримав від вузлових кешів вмісту й надав дочірнім кешам вмісту протягом періоду звітування. | ||||||||||
repliesFromPeerToClient | Кількість відповідей, які кеш вмісту отримав від вузлових кешів вмісту й надав клієнтським пристроям Apple протягом періоду звітування. | ||||||||||
requestsFromChild | Кількість запитів на викачування, які кеш вмісту отримав від дочірніх кешів вмісту протягом періоду звітування. | ||||||||||
requestsFromClient | Кількість запитів на викачування, які кеш вмісту отримав від клієнтських пристроїв Apple протягом періоду звітування. | ||||||||||
requestsFromPeer | Кількість запитів на викачування, які кеш вмісту отримав від вузлових кешів вмісту протягом періоду звітування. | ||||||||||
requestsRejectedForNoSpace | Кількість запитів на викачування, які кеш вмісту відхилив протягом періоду звітування через високе навантаження на кеш (з HTTP-відповіддю з кодом 503, служба недоступна). |
Групування результатів
Деякі з наведених елементів можна об’єднувати в групи для зручності. Нижче наведено кілька пропозицій. Увесь вміст базується на цілих числах.
Вміст | Груповані об’єкти | Опис | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Байтів викачано | bytesFrom <Origin,Parent,Peer>To | Обсяг даних, які кеш вмісту викачав з інтернету або з вузлових чи батьківських елементів протягом періоду звітування. | |||||||||
Байтів закачано | Сума bytesImportedBy* | Обсяг даних, закачаних через кеш вмісту протягом періоду звітування. | |||||||||
Байтів надано | Загальний обсяг даних, які кеш вмісту надав протягом періоду звітування. Коли це значення не дорівнює нулю, кеш вмісту працює. | Сума bytesFrom*To* | |||||||||
Байтів надано вузловому елементу | Сума bytesFrom*ToPeer | Обсяг даних, які кеш вмісту надав будь-якому зі своїх вузлових кешів вмісту протягом періоду звітування. | |||||||||
Байтів надано дочірньому елементу | Сума bytesFrom*ToChild | Обсяг даних, які кеш вмісту надав будь-якому зі своїх дочірніх кешів вмісту протягом періоду звітування. | |||||||||
Байтів надано з батьківського елемента | Сума bytesFromParentTo* | Обсяг даних, які кеш вмісту викачав із будь-якого зі своїх батьківських кешів вмісту протягом періоду звітування. | |||||||||
Байтів надано з вузлового елемента | Сума bytesFromPeerTo* | Обсяг даних, які кеш вмісту викачав із будь-якого зі своїх вузлових кешів вмісту протягом періоду звітування. | |||||||||
Байтів надано з джерела | Сума bytesFromOriginTo* | Обсяг даних, які кеш вмісту викачав через інтернет протягом періоду звітування. | |||||||||
Байтів надано з кешу | Сума bytesFromCacheTo* | Обсяг даних, які кеш вмісту надав зі свого кешу протягом періоду звітування. Що ближче це значення до значення в полі «Байтів надано», то більше кеш вмісту допоміг. | |||||||||
Байтів надано клієнтському елементу | Сума bytesFrom*ToClient | Обсяг даних, які кеш вмісту надав клієнтським пристроям Apple протягом періоду звітування. |
Отримання даних про навантаження на кеш
Ви можете дізнаватися, наскільки терміново кеш вмісту потребував місця в сховищі протягом періоду звітування. Що менше навантаження на кеш, то краще.
Монітор активності розраховує навантаження таким чином:
100%, коли requestsRejectedForNoSpace > 0
80%, коли bytesPurgedYoungerThan1Day > 0
60%, коли bytesPurgedYoungerThan7Days > 0
40%, коли bytesPurgedYoungerThan30Days > 0
20%, коли bytesPurgedTotal > 0
0% в інших випадках
Монітор активності також збирає наведені вище елементи, наприклад щоб обчислити значення протягом певного інтервалу, який перевищує один період.
Кількість байтів, дій імпорту, запитів чи відповідей додаються за весь часовий інтервал.
Для даних навантаження на кеш обчислюється максимальне значення за часовий інтервал.
Зразок коду для читання бази даних метрики
#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
}
}