Chciałbym śledzić, ile pamięci różne programy dotykają w określonych stanach. Na przykład powiedzmy, że mam program graficzny. Może zużywać znacznie mniej pamięci, gdy jest zminimalizowany, ponieważ nie będzie przerysowywać okna, które wymaga odczytywania obrazów i czcionek oraz wykonywania wielu funkcji bibliotecznych. Obiekty te są nadal dostępne w pamięci, ale w rzeczywistości nie są używane.Śledzenie aktywnie używanej pamięci w programach linuksowych
Narzędzia takie jak top
mają ograniczoną użyteczność, ponieważ po prostu mówią, ile pamięci jest mapowane na przestrzeń adresową programu i jaka jest jej część w fizycznej pamięci RAM. Podobnie, wykrywacze nieszczelności powiedzą tylko, kiedy pamięć jest niedostępna, a nie, jeśli po prostu nie jest używana.
Czy istnieje narzędzie, które pozwala w ten sposób śledzić aktywnie/nieużywaną pamięć? Jeśli to możliwe, chciałbym śledzić użycie nie tylko na stercie, ale również w pamięci przechowującej kod programu/biblioteki.
EDIT: chciałbym wyjaśnić: Chcę wiedzieć znacznie więcej pamięci program faktycznie czyta, pisze, lub wykonuje w pewnym momencie, to znaczy, po osiągnięciu pewnego stanu. Podczas gdy liczba stron w przestrzeni adresowej i liczba stron rezydentnych są ważnymi pomiarami, nie jest to tym, czego szukam.
mam realizuje trzy podejścia teraz:
- pisałem bibliotekę że czyści bity ochrony wszystkich obszarów pamięci (oprócz stosu i własnym kodem) z pliku/proc/self/mapy używając `mprotect`. Posiada mechanizm segfault, który przywraca bity ochrony i zwiększa licznik. Załaduję go za pomocą `LD_PRELOAD`, i zaczyna śledzić dostęp do pamięci po otrzymaniu sygnału. Doprowadziło to do pewnych prawdziwych błędów z pozornie fałszywymi adresami (nie są one przechowywane w żadnych rejestrach lub pobliskiej pamięci w momencie wystąpienia błędu).
- Napisałem program `purge`, który przydziela i czyta z pamięci używając` mmap` dopóki `mmap` nie zwróci błędu. Miejmy nadzieję, że wymusi wszystkie strony z procesu docelowego, który jest zawieszony, podczas gdy `purge` jest uruchomiony. Następnie liczę liczbę stron, gdy proces docelowy zostanie wznowiony, używając `pidstat`. To wydaje się działać, ale jest to bardzo tępy instrument. Nie podaje żadnych informacji o stronach, które zostały dotknięte.
- Powiedziano mi, że valgrind umożliwia pisanie wtyczek, które powodują wykonanie określonych akcji w określonych zdarzeniach, np. Dostęp do pamięci. To wygląda obiecująco.
duplikat: http://stackoverflow.com/questions/131303/linux-how-to-measure-actual -memory-usage-of-an-application-or-process – lothar