Jestem na komputerze Mac Mini z systemem OS X 10.8.2. Jestem twórcą aplikacji, ale w tym przypadku buduję aplikację w C ++, więc nie mogę używać Xcode do tego pytania. Chciałbym śledzić, ile pamięci używa moja aplikacja, ale nie chcę jej ręcznie zapisywać. Jak mam to zrobic.
WIĘCEJ INFORMACJI: Chcę nagrywać przez cały dzień. Aplikacja będzie działać przez cały dzień, aby móc porównywać szczyty pamięci. Nie jestem przeciwny aplikacjom innych firm, o ile są one niezawodne. Dzięki.
Odpowiedzi:
Powinieneś być w stanie to zrobić za pomocą standardu
ps
dowództwo. Zman ps
:Jedyne inne szczegóły, których potrzebujesz to PID procesu. Jeśli więc Twoja aplikacja nazywa się myApp, możesz uzyskać PID w następujący sposób:
Który drukuje taką listę:
Pierwsza kolumna to identyfikator procesu (PID). Teraz, jeśli chcesz to zautomatyzować, musisz pominąć linię zawierającą polecenie grep i zapisać wynik w zmiennej BASH:
The
awk
część powoduje, że polecenie drukuje tylko pierwsze pole, PID.Możesz to wszystko połączyć w jedną linijkę, która co minutę zaoszczędzi pamięć twojej aplikacji w pliku o nazwie
memlog.txt
:while sleep 60
powoduje, że bash działa w nieskończonej pętli, czekając na 60 sekund między pętlamisleep 60
każe mu czekać 60 sekund. Zmień tę wartość, jeśli chcesz ją częściej aktualizować.Wynikowym wynikiem jest plik (
memlog.txt
) z 4 kolumnami: PID twojej aplikacji, rozmiar zestawu rezydentnego, rozmiar pamięci wirtualnej i procent pamięci. Na przykład:Można to łatwo rozszerzyć o użycie procesora i czas dla każdego pomiaru. Na przykład, aby uwzględnić czas:
źródło
`
jest po prostu powiedzieć BASH, że polecenie jest kontynuowane w następnej linii, używane tutaj dla ułatwienia czytania. Powinno zadziałać, jeśli skopiujesz wklej bezpośrednio, to nie będzie kopiowane ręcznie. Cała rzecz w jednej linii jestwhile(1); do date=$(date +%D" "%H:%M:%S); echo -n "$date : " >> memlog.txt; pid=$(ps x | grep myApp | grep -v grep | gawk '{print $1}') && ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; sleep 60 ; done
. Jeśli chodzi o wizualne, wziąłbym wartości i wykreślił je.while(1); do date=$(date +%D" "%H:%M:%S); echo -n "$date : " >> memlog.txt; pid=$(ps x | grep Nightly | grep -v grep | gawk '{print $1}') && ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; sleep 60 ; done
sudo chmod +x
aby uczynić go wykonywalnym. Następnie ./memTesting.sh. Nadal generuje błąd informujący, że używa nieznanego polecenia.