
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 }}