Miary magazynu zawartości na Macu
Magazyn zawartości przechowuje miary w następującym folderze:
/Library/Application Support/Apple/AssetCache/Metrics.
Miary nie są przenoszone wraz z magazynem zawartości. Są one zawsze przechowywane w tym miejscu. Na przykład, jeśli przeniesiesz magazyn z folderu:
/Library/Application Support/Apple/AssetCache/Data
do
/Volumes/Data/Library/Application Support/Apple/AssetCache/Data
miary nadal będą przechowywane w folderze:
/Library/Application Support/Apple/AssetCache/Metrics
Jeśli na Macu kiedykolwiek używany był magazyn zawartości, w tym folderze znajduje się plik o nazwie Metrics.db oraz mogą znajdować się inne pliki o podobnych nazwach. Pliki te zawierają bazę danych SQLite, którą można odczytać.
Obiekt CoreData opisujący miary jest dostępny jako element „Metric” w pliku /usr/libexec/AssetCache/AssetCache.momd.
Uwaga: Ten opis dotyczy modelu w wersji 7. W przyszłych wydaniach systemu macOS Apple może bez wcześniejszego powiadomienia zmienić ten model lub przejść z SQLite na inną bazę danych. W takiej sytuacji skonfigurowane przez Ciebie skrypty agregujące dane magazynu zawartości mogą wymagać uaktualnienia.
Magazyn zawartości:
dodaje nowy wiersz do bazy danych co minutę,
nie dodaje wierszy złożonych z samych zer w trybie bezczynności — w tej sytuacji pomija dodawanie takich wierszy,
nie modyfikuje istniejących wierszy,
okresowo usuwa wiersze starsze niż 30 dni.
Porada: Możesz zmienić czas raportowania (domyślnie wynoszący 60 sekund), zmieniając ustawienie zaawansowane MetricsInterval
, możesz także zmienić maksymalny czas przechowywania wierszy (domyślnie wynoszący 30 dni), zmieniając ustawienie zaawansowane MetricsMaxAge
.
Poniżej przedstawione są kolumny, które zawiera każdy wiersz bazy danych. Obowiązkowym obiektem jest jedynie creationDate
, pozostałe są opcjonalne.
Obiekt | Opis | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
bytesDropped | Ilość danych pobranych przez magazyn zawartości w czasie objętym raportem, które nie mogły zostać dodane do pamięci podręcznej magazynu. | ||||||||||
bytesFromCacheToChild | Ilość danych dostarczonych przez magazyn zawartości z jego pamięci podręcznej do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
bytesFromCacheToClient | Ilość danych dostarczonych przez magazyn zawartości z jego pamięci podręcznej do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
bytesFromCacheToPeer | Ilość danych dostarczonych przez magazyn zawartości z jego pamięci podręcznej do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
bytesFromOriginToChild | Ilość danych pobranych przez magazyn zawartości przez Internet i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
bytesFromOriginToClient | Ilość danych pobranych przez magazyn zawartości przez Internet i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
bytesFromOriginToPeer | Ilość danych pobranych przez magazyn zawartości przez Internet i dostarczonych do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
bytesFromParentToChild | Ilość danych pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
bytesFromParentToClient | Ilość danych pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
bytesFromParentToPeer | Ilość danych pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
bytesFromPeerToChild | Ilość danych odebranych przez magazyn zawartości z magazynów równorzędnych i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
bytesFromPeerToClient | Ilość danych odebranych przez magazyn zawartości z magazynów równorzędnych i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
bytesImportedByHTTP | Ilość danych odebranych przez magazyn zawartości przy użyciu protokołu HTTP w czasie objętym raportem. | ||||||||||
bytesImportedByXPC | Ilość danych odebranych przez magazyn zawartości przy użyciu protokołu XPC w czasie objętym raportem. | ||||||||||
bytesPurgedTotal | Ilość danych automatycznie usuniętych z magazynu zawartości w czasie objętym raportem. Zawiera bytesPurgedYoungerThan30Days. | ||||||||||
bytesPurgedYoungerThan1Day | Ilość danych automatycznie usuniętych z magazynu zawartości w czasie objętym raportem, które zostały dodane do magazynu mniej niż dzień wcześniej. | ||||||||||
bytesPurgedYoungerThan30Days | Ilość danych automatycznie usuniętych z magazynu zawartości w czasie objętym raportem, które zostały dodane do magazynu mniej niż 30 dni wcześniej. Zawiera bytesPurgedYoungerThan7Days. | ||||||||||
bytesPurgedYoungerThan7Days | Ilość danych automatycznie usuniętych z magazynu zawartości w czasie objętym raportem, które zostały dodane do magazynu mniej niż 7 dni wcześniej. Zawiera bytesPurgedYoungerThan1Day. | ||||||||||
creationDate | Data utworzenia obiektu miar. Ten element miar opisuje wydajność magazynu zawartości w okresie do daty podanej jako creationDate. | ||||||||||
importsByHTTP | Liczba żądań wysyłania odebranych przez magazyn zawartości przy użyciu protokołu HTTP w czasie objętym raportem. | ||||||||||
importsByXPC | Liczba żądań wysyłania odebranych przez magazyn zawartości przy użyciu protokołu XPC w czasie objętym raportem. | ||||||||||
period | Czas trwania okresu objętego raportem (w sekundach). Koniec okresu podany jest jako creationDate. | ||||||||||
repliesFromCacheToChild | Liczba odpowiedzi dostarczonych przez magazyn zawartości z jego pamięci podręcznej do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
repliesFromCacheToClient | Liczba odpowiedzi dostarczonych przez magazyn zawartości z jego pamięci podręcznej do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
repliesFromCacheToPeer | Liczba odpowiedzi dostarczonych przez magazyn zawartości z jego pamięci podręcznej do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
repliesFromOriginToChild | Liczba odpowiedzi pobranych przez magazyn zawartości przez Internet i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
repliesFromOriginToClient | Liczba odpowiedzi pobranych przez magazyn zawartości przez Internet i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
repliesFromOriginToPeer | Liczba odpowiedzi pobranych przez magazyn zawartości przez Internet i dostarczonych do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
repliesFromParentToChild | Liczba odpowiedzi pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
repliesFromParentToClient | Liczba odpowiedzi pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
repliesFromParentToPeer | Liczba odpowiedzi pobranych przez magazyn zawartości z magazynów nadrzędnych i dostarczonych do magazynów równorzędnych w czasie objętym raportem. | ||||||||||
repliesFromPeerToChild | Liczba odpowiedzi odebranych przez magazyn zawartości z magazynów równorzędnych i dostarczonych do magazynów podrzędnych w czasie objętym raportem. | ||||||||||
repliesFromPeerToClient | Liczba odpowiedzi odebranych przez magazyn zawartości z magazynów równorzędnych i dostarczonych do urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
requestsFromChild | Liczba żądań pobierania odebranych przez magazyn zawartości z magazynów podrzędnych w czasie objętym raportem. | ||||||||||
requestsFromClient | Liczba żądań pobierania odebranych przez magazyn zawartości z urządzeń klienckich Apple w czasie objętym raportem. | ||||||||||
requestsFromPeer | Liczba żądań pobierania odebranych przez magazyn zawartości z magazynów równorzędnych w czasie objętym raportem. | ||||||||||
requestsRejectedForNoSpace | Liczba żądań pobierania odrzuconych przez magazyn zawartości w czasie objętym raportem (ze względu na zbyt duże obciążenie; kod odpowiedzi HTTP 503, Service Unavailable). |
Grupowanie wyników
Przydatne może okazać się grupowanie niektórych z powyższych elementów. Oto kilka sugestii. Wszystkie wartości to liczby całkowite.
Zawartość | Grupowane obiekty | Opis | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bajty dostarczone | Łączna ilość danych dostarczonych przez magazyn zawartości w czasie objętym raportem. Jeśli ta wartość jest różna od zera, magazyn zawartości działa. | Suma bytesFrom*To* | |||||||||
Bajty dostarczone do klientów | Suma bytesFrom*ToClient | Ilość danych dostarczonych przez magazyn zawartości do urządzeń klienckich Apple w czasie objętym raportem. | |||||||||
Bajty dostarczone do magazynów podrzędnych | Suma bytesFrom*ToChild | Ilość danych dostarczonych przez magazyn zawartości do magazynów podrzędnych w czasie objętym raportem. | |||||||||
Bajty dostarczone do magazynów równorzędnych | Suma bytesFrom*ToPeer | Ilość danych dostarczonych przez magazyn zawartości do magazynów równorzędnych w czasie objętym raportem. | |||||||||
Bajty dostarczone z magazynów nadrzędnych | Suma bytesFromParentTo* | Ilość danych pobranych przez magazyn zawartości ze wszystkich magazynów nadrzędnych w czasie objętym raportem. | |||||||||
Bajty dostarczone z magazynów równorzędnych | Suma bytesFromPeerTo* | Ilość danych pobranych przez magazyn zawartości ze wszystkich magazynów równorzędnych w czasie objętym raportem. | |||||||||
Bajty dostarczone z pamięci podręcznej | Suma bytesFromCacheTo* | Ilość danych dostarczonych przez magazyn zawartości z jego pamięci podręcznej w czasie objętym raportem. Im ta wartość jest bliższa wartości Bajty pobrane, tym bardziej pomocne jest działanie magazynu zawartości. | |||||||||
Bajty dostarczone ze źródła | Suma bytesFromOriginTo* | Ilość danych pobranych przez magazyn zawartości przez Internet w czasie objętym raportem. | |||||||||
Bajty pobrane | bytesFrom <Origin,Parent,Peer>To | Ilość danych pobranych przez magazyn zawartości (przez Internet albo z magazynów równorzędnych lub nadrzędnych) w czasie objętym raportem. | |||||||||
Bajty przesłane | Suma bytesImportedBy* | Ilość danych przesłanych przez magazyn zawartości w czasie objętym raportem. |
Pobieranie danych dotyczących obciążenia magazynu zawartości
Możesz sprawdzić stopień zapotrzebowania magazynu zawartości na dodatkowe miejsce na dysku w czasie objętym raportem. Im niższe jest obciążenie, tym lepiej.
Monitor aktywności oblicza wykorzystanie pamięci podręcznej w następujący sposób:
100%, gdy requestsRejectedForNoSpace > 0
80%, gdy bytesPurgedYoungerThan1Day > 0
60%, gdy bytesPurgedYoungerThan7Days > 0
40%, gdy bytesPurgedYoungerThan30Days > 0
20%, gdy bytesPurgedTotal > 0
0% w przeciwnej sytuacji
Monitor aktywności również zestawia powyższe informacje, pozwalając na przykład obliczać wartości w czasie dłuższym niż jeden okres.
Aby uzyskać liczbę bajtów, liczbę importów, liczbę żądań lub liczbę odpowiedzi, zsumuj je w danym okresie.
Aby uzyskać obciążenie magazynu zawartości, oblicz maksymalną wartość w danym okresie.
Przykładowy kod odczytujący bazę danych miar
#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
}
}