Proste narzędzie do wykresu wykorzystania pamięci?

14

Czy istnieje skrypt, który pokaże wykorzystanie pamięci jako wykres, na przykład jako wykres kołowy, przy czym każdy proces jest oddzielnym wycinkiem?

Nie szukam czegoś takiego jak Munin do wykresu zużycia pamięci w czasie, ale raczej pokazuję zużycie pamięci na proces w jednym momencie.

Aby moja prośba była jeszcze bardziej niejasna, dotyczy serwera bezgłowego (więc nie ma aplikacji X). Najprostszym sposobem byłoby napisanie pliku PNG lub ewentualnie pliku HTML (który mógłby użyć Javascript, aby umożliwić filtrowanie procesów, przełączanie między typami grafów itp.)

dbr
źródło

Odpowiedzi:

13

Rachunek pamięci procesowej jest trudny z wielu powodów. Do prostego monitorowania wystarczą prawdopodobnie skrypty gkrellmd lub nagios. Jeśli chcesz większej dokładności, musisz spojrzeć mocniej.

smem wprowadza koncepcję proporcjonalnego rozmiaru zestawu :

Ponieważ duże części pamięci fizycznej są zwykle współużytkowane przez wiele aplikacji, standardowa miara zużycia pamięci znana jako rozmiar zestawu rezydentnego (RSS) znacznie zawyża wykorzystanie pamięci. Zamiast tego PSS mierzy „sprawiedliwy udział” każdej aplikacji w każdym wspólnym obszarze, aby uzyskać realistyczny pomiar.

Przykład: uruchamiasz GNOME, powodując uruchomienie szeregu procesów, po jednym dla każdego apletu i programu. Wszystkie prowadzą do libglib. Linux ładuje libglib do jednego bloku pamięci i mapuje go na każdy proces, który chce libglib. Naiwne rozliczanie pamięci uwzględnia pełny rozmiar libglib dla każdego procesu z nim powiązanego.

smem dzieli koszt libglib między procesy z niego korzystające, aby dać dokładniejszy obraz rzeczywistości. Posiada również wiele opcji wyświetlania zużycia pamięci (ze strony internetowej):

  1. Pokaż podstawowe informacje o procesie smem
  2. Pokaż widok systemu smem -R 4G -K / ścieżka / do / vmlinux -w
  3. Pokaż sumy i procenty smem -t -p
  4. Pokaż różne kolumny smem -c „nazwa użytkownika pss”
  5. Pokaż procesy filtrowane przez mapowanie smem -M libxml
  6. Pokaż odwzorowania filtrowane przez proces smem -m -P [e] volution
  7. Odczytaj dane z przechwytywania tarball smem - source capture.tar.gz
  8. Pokaż wykres słupkowy oznaczony przez pid smem --bar pid -c "pss uss"
  9. Pokaż wykres kołowy RSS oznaczony nazwą smem --pie name -s rss

Będziesz jednak potrzebował bardzo nowego jądra (> 2.6.27).

jldugger
źródło
1
Tak, ich sugestia, że ​​2.6.27 jest dość aktualna, jest dość śmieszna. Jedynymi znanymi mi dystrybucjami, które są dostarczane z nowszym jądrem, są Fedora 10 i Ubuntu 9.01.
Dave Cheney
9,04; Ubuntu 8.10 jest dostarczane z wersją 2.6.27, ale wersja 2.6.30 jest dostępna w wersji RC3.
jldugger
Przepraszam, że długo tęskniłem za ziemią RHEL, gdzie 2.6.18 uważa się za niedawne.
Dave Cheney
5

Nie mogę nic wymyślić z półki

jednak kombinacja skryptu PHP wykonującego ps -AH v | awk „{print 8 $, 9 $, 10 $}” i użycie tego z pChart może dać ci stronę internetową, która zrobiłaby to, czego szukasz? (użycie w Kb, procent sumy i nazwa procesu)

Mark Regensberg
źródło
1
+1, myślałem o tym z API Google Chart. :)
Węzeł
Słuszna uwaga. interfejs google chart API jest prawdopodobnie szybszy do pracy z ...
Mark Regensberg
2

Spójrz na sarface - to zależy od danych sar, i możesz monitorować zużycie pamięci (i wszystkie inne dane sar / sysstat) na żywo.

Kserkses
źródło
1

Zrób to sam. Stwórz prosty skrypt powłoki aktualizujący bazę danych RRD. Następnie narysuj wykres za pomocą rrdtool.


źródło
1

Jeśli naprawdę lubisz niższe poziomy szczegółowości, nie zapomnij o kolekcjonowaniu. Oto przykład wykorzystania pamięci na proces, którą może zgłosić:

RECORD 1 cag-dl585-02 (1244758290.002) (czw. 11 czerwca 18:11:30 2009)

PODSUMOWANIE PROCESU (liczniki są / s)
# PID Użytkownik S VmSize VmLck VmRSS VmData VmStk VmExe VmLib MajF Polecenie MinF
 9089 root S 66856K 0 2328K 1440K 212K 736K 6812K 0 0 sendmail:
 9097 smmsp S 57600K 0 1772K 1304K 204K 736K 5904K 0 0 sendmail:
 9108 root S 6428K 0 360K 180K 84K 88K 1944K 0 0 gpm
 9120 root S 74808K 0 1136K 476K 520K 48K 1920K 0 0 crond
 9173 xfs S 20904K 0 1828K 1124K 88K 104K 3084K 0 0 xfs

Jeśli interesują Cię określone procesy, możesz określić odpowiednie filtry (w tym przełącznik do wyświetlania wątków).

A jeśli ogólnie interesujesz się pamięcią, może ona również wyświetlać szczegóły płyty, a nawet ma wyjście w formacie vmstat. Dlaczego miałbyś chcieć wyświetlać dane w formacie vmstat, skoro już to robi istniejące narzędzie? To proste - dzięki zbiorczemu możesz logować statystyki do pliku i odtwarzać go później w wielu formatach.

spróbuj, spodoba ci się

Jeff Atwood
źródło
1
  1. Grep proces (y).
  2. Analizuj dane wyjściowe i zapisz w formacie tekstowym oddzielonym przecinkami.
  3. otwórz plik oddzielony przecinkami w programie Excel.
  4. Narysuj wykres dla tych danych, korzystając z narzędzia wykresu programu Excel.

Jeśli chcesz tworzyć migawki pamięci w różnych odstępach czasu ... ustaw zadanie cron na żądany odstęp i uruchom skrypt.

mam nadzieję, że to pomaga ....

Jeff Atwood
źródło
0

Nie jest to dokładnie to, czego szukasz, ale być może możesz dostosować to do swoich potrzeb, korzystając z tego odniesienia (poszukaj „Wykorzystanie pamięci na proces”).

Ivan
źródło
0

Możesz użyć #top lub #sysstat

Rajat
źródło
0

Nie wdałem się w więcej szczegółów, ale collectl ma opcję generowania danych wyjściowych oddzielonych separatorem, więc w przypadku gnuplot po prostu generujesz swoje dane ze spacjami i wszystko jest gotowe. Ładnie ładuje się nawet w programie Excel. Jeśli chcesz przecinków, możesz zmienić ogranicznik, a jeśli naprawdę chcesz zrobić trasę rrd (uważaj, ponieważ wykresy nie muszą pasować do danych!), Możesz zmienić ogranicznik na dwukropki, a nawet zmienić znaczniki czasu na UTC. -znak


źródło
0

kSar, oparty na danych sar, ale oparty na Javie, więc jest mniej więcej niezależny od platformy i pozwoli ci ssh na zdalnym hoście w celu pobrania danych.

http://ksar.atomique.net/

Greeblesnort
źródło