Bootchart
Program nazywa się bootchart, uruchamia we wczesnej fazie rozruchu
systemu (jeszcze w fazie initramfs), rejestruje przebieg startu
(działające procesy, obciążenie itp), tworzy tekstowe logi z
informacjami o uruchomionych procesach i obciążeniu systemu a
następnie generuje na ich podstawie graficzny raport (plik PNG) nieco
przypominający wykres Gantta.
Wkleiłem tu tylko lewy górny narożnik wygenerowanego obrazka, całość
w moim wypadku ma wymiary ok. 3000x8000 pikseli i najchętniej oglądam
ją przy pomocy programiku display z pakietu ImageMagick (który wyświetla pomocniczą
mapkę obrazka). Jeszcze może fragment ze środkowej części
(nieco przeskalowany by zmieścić ciut więcej procesów):
Cały obrazek (ok. 1MB) można pobrać stąd.
Interpretacja jest dość prosta: na osi od lewej do prawej mamy czas od uruchomienia, na początku raportu
wykres obciążenia CPU oraz dysku a w głównej części informacje od kiedy do kiedy działały poszczególne
procesy. Należy to interpretować z pewną dozą rozsądku - czasami program działa długo, bo na coś czeka
albo ponieważ monitoruje inne procesy - ale wizualizacja jest zaskakująco czytelna.
Instalacja
Instalacja (na Debianie i Ubuntu) sprowadza się do zainstalowania pakietów
bootchart oraz pybootchartgui:
$ sudo apt-get install bootchart pybootchartgui
(ten pierwszy odpowiada za zbieranie danych, ten drugi za malowanie obrazka).
Źródła są na stronach
bootchart oraz pybootchartgui.
Instalacja bootchart powinna spowodować przegenerowanie initramfs
(dzięki temu program będzie monitorował także wczesne fazy rozruchu z operacjami
takimi jak montowanie systemów plików czy aktywacja macierzy).
Używanie
Używanie sprowadza się do ... restartu komputera i zajrzenia do
katalogu /var/log/bootchart, gdzie są odkładane wyniki działania
programu. Po kilku rebootach może to wyglądać np. tak:
$ ls -al /var/log/bootchart
total 49760
drwxr-xr-x 2 root root 4096 2010-05-16 19:22 .
drwxr-xr-x 23 root root 8192 2010-05-16 19:20 ..
-rw-r--r-- 1 root root 958203 2010-05-15 09:14 banach-lucid-20100515-1.png
-rw-r--r-- 1 root root 11241741 2010-05-15 09:14 banach-lucid-20100515-1.tgz
-rw-r--r-- 1 root root 1023700 2010-05-15 18:26 banach-lucid-20100515-2.png
-rw-r--r-- 1 root root 11944668 2010-05-15 18:26 banach-lucid-20100515-2.tgz
-rw-r--r-- 1 root root 995009 2010-05-16 10:37 banach-lucid-20100516-1.png
-rw-r--r-- 1 root root 12344202 2010-05-16 10:36 banach-lucid-20100516-1.tgz
-rw-r--r-- 1 root root 996674 2010-05-16 19:22 banach-lucid-20100516-2.png
-rw-r--r-- 1 root root 11422315 2010-05-16 19:21 banach-lucid-20100516-2.tgz
Jak widać, efektem każdego startu jest pojawienie się pliku .png (obrazek
z raportem) a także .tgz (archiwum zawierające logi). W razie gdyby
pybootchartgui nie był zainstalowany, pojawi się tylko plik .tgz (z którego
raport można zrobić później, np. na innej maszynie). Nazwy plików łączą
nazwę maszyny, nazwę systemu, datę oraz numer rebootu danego dnia.
Uwaga: /var/log/bootchart warto od czasu do czasu sprzątnąć.
Dane można też opracowywać post factum skryptem pybootchartgui
(na Ubuntu podsymlinkowanym także pod nazwą bootchart).
Na przykład tak robimy wersję SVG:
$ pybootchartgui /var/log/bootchart/banach-lucid-20100516-2.tgz \
--format=svg --output=banach-lucid-20100516-2.svg
a tak uruchamiamy viewer wbudowany w pybootchartgui (nie polecam,
działa mniej płynnie niż podgląd plików .png):
$ bootchart /var/log/bootchart/banach-lucid-20100516-2.tgz \
--interactive
Taka drobna uwaga: pybootchartgui nie ma w repozytoriach debiana.
Ooo, dziwne, Ubuntu z czymś niedesktopowym uciekło ;-)
Z tego co widzę Debian ma Javową alternatywę bootchart-view. Powinna działać podobnie (w końcu bootchartgui był pisany jako jej klon).
Majac w systemie 64bitową jave spoza repozytoriow, zdecydowanie wole pobrac sobie pybootchartgui ze strony autorow.
A co do Ubuntu, to przeciez 7% pakietow nie biora z debiana ;-)
Tak juz zupelnie btw, na moim laptopie bootchart pokazal 17.5 sekundy, zas realny czas startu od przycisku power do gotowego pulpitu (z wpisaniem hasla w gdm po drodze) to 40 - 45 sekund.
Fajne, a coś podobnego, do obserwacji już działającego systemu, np. z filtrowaniem per użytkownik? Można pewnie źródła powyższego wykorzystać.
Wydaje mi się, że ta technika w ścisłej formie się raczej nie nada, trudno mi sobie wyobrazić analizowanie takiego obrazka dla okresu czasu dłuższego niż parędziesiąt sekund.
Jeśli chodzi o snapshotowanie stanu i generowanie na tej podstawie różnej maści wykresów i ilustracji, to narzędzi jest sporo. Z konkretnymi propozycjami nie chcę się mądrzyć bo nie wiem jaką dokładnie potrzebę masz na myśli.
Chciałbym pokazać studentom jak wyglądają procesy przez nich tworzone. Kiedy dobierają się one do procesora, I/O. Wystarczy kilkanaście sekund, zawężenie do nazwy procesu, ewentualnie jakaś możliwość obróbki danych tekstowych, a wykresy takie jak bootchart (i to pewnie da się wykorzystać do generowania wykresu) są idealne. Czyli tak naprawdę potrzebuję czegoś do generowania danych w formacie bootcharta.
Hmm, napisałem:
dałem chwilę podziałać i wcisnąłem Ctrl-C. W /tmp/test wylądowały pliki jako żywo te same, co w bootchartowych tar.gzach. Potem jeszcze do kompletu
i zrobił się .tar.gz.
Niestety
sypnął mi się zagadkowo (
MemoryError) ale być może to jakaś prosta do poprawienia głupota (albo efekt tego, że kolekcję robiłem bez sudo)(aha, to 5 to herce, czyli ilość próbkowań na sekundę)
SOA#1, wrzuca do obrazka wykres zaczynający się od startu systemu (mimo, że dane są tylko na kawałku), więc jeśli masz duży uptime, to problemy z pamięcią uzasadnione. Popatrzę w źródła, czy można zmienić ten czas.
1:46 - to jakiś dramat. U mnie 0:26 było out-of-the-box. Sprawdzałeś co tak wydłuża start?
To 1:46 to głównie sprawa ustalenia, kiedy właściwie startup się skończył. Jeśli się przypatrzysz, to widać, że początek startu sesji Gnome się tu nawet załapał (około 60-ej sekundy X-y, nieco później różne programy z sesji userskiej) czyli gdzieś wtedy się już zalogowałem (a pewnie choć kilka sekund okno logowania wisiało). Do tego wcześniej jest min. 20-sekundowy fsck który akurat załapał się na ten restart i trochę operacji na urządzeniach i filesystemach (używam LVM i paru systemów plików). Start spowalniają mi też trochę niezbyt typowe dla laptopa narzędzia takie jak choćby serwer Postgresa.
Co do długości jako takiej:
bootchartma dość pokrętną logikę oznaczania końca bootu, przynajmniej w pakiecie a'la Ubuntu. Jak można zobaczyć w/etc/init/bootchart.confzbiera dane dość długo (do zakończenia się zadaniarc- czyli jak zgaduję skończenia przelotki przez wszystkie skrypty startowe - plus 45 sekund) a potem próbuje odciąć rysunek po pojawieniu się któregoś z window-managerów. Zatem jeśli nie zaloguję się przez dłuższą chwilę, będę miał na diagramie co najmniej około minuty, a pewnie więcej.Dla mnie ciekawe jest tutaj nie tyle mierzenie łącznego czasu, co obserwowanie jakie procesy potrafiły działać współbieżnie a jakie nie i jaka była ogólna kolejność zdarzeń