Terminal pogryzł człowieka: nmon

Monitorowanie zasobów komputera z poziomu tekstowej linii komend ma wielowiekową tradycję i niebagatelne znaczenie dla administratorów serwerów. Ale natłok informacji o naszej maszynie nie jest zarezerwowany jedynie dla wtajemniczonych, każdy może w większym lub mniejszym stopniu sprawdzić co w układach scalonych piszczy. Osiągnąć możemy to za pomocą wielu narzędzi, ale skoro wspomnieliśmy o terminalu, to dlaczego by nie przetestować nmon. Ten sympatyczny program wśród wielu ciekawostek ma jeszcze jedną unikatową funkcję – może działać w tle i zapisywać statystyki zużycia zasobów naszego komputera. A to jest naprawdę ciekawe.

Wszystkiego po trochu
Nmon wbrew pozorom i na przekór trendom nie jest kolejnym klonem polecenia top, lub podrasowanym ps. W niebanalnej oprawie interfejsu popełnionego przy współudziale ncurses potrafi wyświetlić nam zestaw wielu przydatnych informacji o naszej maszynie. Na przykład? A na przykład:

  • informacje o kernelu, procesorze, systemie,
  • zużycie mocy CPU,
  • wykorzystanie pamięci konwencjonalnej,
  • wykorzystanie pamięci wirtualnej,
  • informacje o dyskach, partycjach, systemie plików,
  • operacje I/O,
  • wykorzystanie urządzeń sieciowych,
  • NFS,
  • lista procesów.

Jeszcze więcej wszystkiego

I na tym nie koniec. Jak sam autor podsumowuje próbę udokumentowania możliwości programu – „Ha ha ha ha – you are joking right :-)”. Całkiem nieźle, prawda? Na dodatek większość z tych danych nmon będzie w stanie wyświetlić nam na jednym ekranie.

Nmon
No dobrze, program jest przebogaty w opcje, ale jakie? Nmon może zostać uruchomiony z podaniem odpowiednich parametrów:

$# nmon -h

Hint: nmon [-h] [-s <seconds>] [-c <count>] [-f -d <disks> -t -r <name>] [-x]

        -h            FULL help information
        Interactive-Mode:
        read startup banner and type: "h" once it is running
        For Data-Collect-Mode (-f)
        -f            spreadsheet output format [note: default -s300 -c288]
        optional
        -s <seconds>  between refreshing the screen [default 2]
        -c <number>   of refreshes [default millions]
        -d <disks>    to increase the number of disks [default 256]
        -t            spreadsheet includes top processes
        -x            capacity planning (15 min for 1 day = -fdt -s 900 -c 96)

Version - nmon 14g

For Interactive-Mode
        -s <seconds>  time between refreshing the screen [default 2]
        -c <number>   of refreshes [default millions]
        -g <filename> User Defined Disk Groups [hit g to show them]
                      - file = on each line: group_name <disks list> space separated
                      - like: database sdb sdc sdd sde
                      - upto 64 disk groups, 512 disks per line
                      - disks can appear more than once and in many groups
        -b            black and white [default is colour]
        example: nmon -s 1 -c 100

For Data-Collect-Mode = spreadsheet format (comma separated values)
        Note: use only one of f,F,z,x or X and make it the first argument
        -f            spreadsheet output format [note: default -s300 -c288]
                         output file is <hostname>_YYYYMMDD_HHMM.nmon
        -F <filename> same as -f but user supplied filename
        -r <runname>  used in the spreadsheet file [default hostname]
        -t            include top processes in the output
        -T            as -t plus saves command line arguments in UARG section
        -s <seconds>  between snap shots
        -c <number>   of snapshots before nmon stops
        -d <disks>    to increase the number of disks [default 256]
        -l <dpl>      disks/line default 150 to avoid spreadsheet issues. EMC=64.
        -g <filename> User Defined Disk Groups (see above) - see BBBG & DG lines
        -N            include NFS Network File System
        -I <percent>  Include process & disks busy threshold (default 0.1)
                      don't save or show proc/disk using less than this percent
        -m <directory> nmon changes to this directory before saving to file
        example: collect for 1 hour at 30 second intervals with top procs
                 nmon -f -t -r Test1 -s30 -c120

        To load into a spreadsheet:
        sort -A *nmon >stats.csv
        transfer the stats.csv file to your PC
        Start spreadsheet & then Open type=comma-separated-value ASCII file
         The nmon analyser or consolidator does not need the file sorted.

Capacity planning mode - use cron to run each day
        -x            sensible spreadsheet output for CP =  one day
                      every 15 mins for 1 day ( i.e. -ft -s 900 -c 96)
        -X            sensible spreadsheet output for CP = busy hour
                      every 30 secs for 1 hour ( i.e. -ft -s 30 -c 120)

Gdy już wykujemy powyższe parametry na blachę, czas na klawiszologię, którą możemy uskuteczniać w czasie działania nmon:

 Interactive Mode Commands
        key --- Toggles to control what is displayed ---
        h   = Online help information
        r   = Machine type, machine name, cache details and OS version + LPAR
        c   = CPU by processor stats with bar graphs
        l   = long term CPU (over 75 snapshots) with bar graphs
        m   = Memory stats
        L   = Huge memory page stats
        V   = Virtual Memory and Swap stats
        k   = Kernel Internal stats
        n   = Network stats and errors
        N   = NFS Network File System
        d   = Disk I/O Graphs
        D   = Disk I/O Stats
        o   = Disk I/O Map (one character per disk showing how busy it is)
        o   = User Defined Disk Groups
        j   = File Systems 
        t   = Top Process stats use 1,3,4,5 to select the data & order
        u   = Top Process full command details
        v   = Verbose mode - tries to make recommendations
        b   = black and white mode (or use -b option)
        .   = minimum mode i.e. only busy disks and processes

        key --- Other Controls ---
        +   = double the screen refresh time
        -   = halves the screen refresh time
        q   = quit (also x, e or control-C)
        0   = reset peak counts to zero (peak = ">")
        space = refresh screen now

na tym nie koniec…
Większość użytkowników zainteresuje głównie klawiszologia, a tę program sam podpowiada – po naciśnięciu klawisza „h”. Zatem, jeżeli chcemy włączyć informacje o systemie – naciskamy „r” (ponowne naciśnięcie wyłącza te informacje), jeżeli interesuje nas CPU naciskamy „c”, „m” dla pamięci i tak dalej.

Jednak głównym gwoździem programu jest kolekcjonowanie w tle statystyk obciążenia CPU, zużycia pamięci, operacji I/O i aktywności na interfejsach sieciowych. Po wywołaniu z parametrem „f” i podaniu okresu zbierania danych oraz częstotliwości takich prób, nmon przechodzi do działania w tle i gromadzenia danych. Przykładowy zapis danych przez okres 2 godzin („-c”), co 30 sekund („-s”):

nmon -f -s30 -c240

Nmon Visualiser
Plik ze zgromadzonymi danymi możemy wykorzystać w różnoraki sposób, np. obejrzeć statystyki z podanego okresu za pomocą programu NMON Visualiser. Wystarczy pobrać go na dysk i uruchomić albo dwuklikiem (trzeba mieć zainstalowaną Javę), albo z terminala poleceniem:

java -jar NMON*.jar

Oczywiście na tym nie koniec. Dla zainteresowanych jest jeszcze programik Java Nmon Analyser, który może nie wyświetla całej palety danych zgromadzonych przez nmon, ale ma ciekawą funkcję – można uruchomić w nim podgląd statystyk na żywo.

A na koniec – nmon znajdziemy w repozytoriach niemal wszystkich dystrybucji.