Recent Changes - Search:

Home Page

Other tools

edit SideBar


nmonchart - webpage graphs from nmon data

nmonchart is a Korn shell script for AIX or Linux to convert nmon collected files to a webpage (.html) including Google Chart and
JavaScript to display the top 53+ AIX and Linux Performance Graphs and configuration details


  • nmonchart <nmon-file> <output-file>.html

For example:

  • nmonchart blue_150508_0800.nmon blue_150508_0800.html

or you could put the .html straight on to your website (assuming Apache is using /var/www/html)

  • nmonchart blue_150508_0800.nmon /var/www/html/blue_150508_0800.html

Here is a simple small sample file so you can see what the graphs look like:

  • sampleC.html - small sample and quick to load but some data faked to make the graphs look good (not largely full of zeros).
  • sampleD.html - large real life sample and can take a few seconds to load
  • Used the nmonchart version 31 like this:
    • ./nmonchart sampleC.nmon sampleC.html
    • ./nmonchart sampleD.nmon sampleD.html
  • Both of these and the original .nmon files are in the download files below for you to try.


Download FileComments
nmonchart31.tarCurrent version 31 - 9th Dec 2016
- Fix for Top Processes sort arguments for Linux which handles -t, differently resulting in not having the Top 20 processes on Linux.
- Fix Linux machines with no disks reported in AAA,disks,0 line - we skip graphing the disks.
- Added sampleD.nmon and sampleD.html as a much larger & more interesting set of nmon stats.
- Note: sampleC had some stats faked up my me!
nmonchart30.tarVersion 30 - 22nd Sept 2016
Fix for running the nmonchart Ksh script on Linux. AIX has "print -n" option but Linux does not.
nmonchart29.tarVersion 29 - 21st July 2016
Comments on v29New Features: for nmonchart version 29
Zoom In and Out added - thanks to Ivan Goncharov for the hint
- Left-click and drag the mouse to highlight an area to Zoom then when you let go it will Zoom In
- Right-click to Zoom Out (reset) and see the whole graph again
nmonchart28.tarVersion 28 - 6th July 2016
Comments on v28New Features: for nmonchart version 28
1) Added PROCCOUNT (count of processes) as this was release via an AIXpert Blog about nmon External Data Collectors
2) Added MORE1 and MORE3 examples for people adding their own stats.
3) Buttons for adapter typo fixed
nmonchart27.tarVersion 27 - 3rd March 2016
Comments on v27New Features:
The buttons labels are upper and lowercase = look nicer
Added the nmon Configuration button to pop-up a window with the AAA and BBB data
Unfortunately, this highlights browser behaving differently
- Firefox no scroll bars so use PageDown
- Chrome has scroll bars
- Internet Explorer I get a blank windows but it works for other people
If you do not want the Config button (it does add to the .html size) set
wantCONFIG=0 near the top of the nmonchart script - =1 means we want it.
The Top Process Summary and Top Commands Buttons moved up at the top line to save space
Download FileComments
nmonchart25.tar12th Feb 2016
Comments on v25New Graphs:
- Disk Service time in milli-seconds
- Disk Read Service time in milli-seconds
- Disk Write Service time in milli-seconds
- Disk Wait time in milli-seconds
You have to switch the collecting of these stats on by running nmon with the -d option
And this generates extra line in the nmon file starting with DISKSERV DISKREADSERV DISKWRITESERV DISKWAIT
nmonchart24.tar15th Jan 2016
Comments on v24New Graphs:
1) Now supported User Defined Disks Groups - good for nmon for Linux -g auto
2) POWER8 S822LC can have NVidia GPU adapters - GPU stats: GPU Util, memory Util, temperature, Watts and GPU MHz
3) Linux Utilisation all 10 stats: user, nice, system, idle, wait for IO, steal, irq, soft irq, guest and guest nice
nmonchart23.tar1st Dec 2015
Comments on v23Small change in handling November and December dates
- Google chart decided Nov month as 010 was in binary!
Bug identified and fix found by Clifford Weinmann - many thanks
Plus more comments in the code.
nmonchart22.tarInitial Release - 8th May 2015


nmon version 16 additional stats
and nmonchart 24 graphs
All ten Linux Utilisation statsMHz changing on a S822LC 
nmon version 16 Nvidia GPU support on S822LC  
GPU CPU UtilisationGPU Memory UtilisationGPU Temperature
GPU Electrical Watts UsedGPU MHz 
nmon Disk Group GraphsCaptured on nmon for Linux with nmon -f -g auto
So its only disks and the disk partitions
are skipped
DG busy,
DG read, DG write,
DG block size & DG Xfers
nmon Disk Service & Wait TimeCaptured on nmon for AIX with nmon -f -dDisk Service Time, Disk Wait Time,
Service Read Time & Service Write Time
Version 27 new buttons AIXNew buttons LinuxConfiguration Details pop-up

README for nmonchart 22 by Nigel Griffiths

The Korn shell script file nmonchart transforms .nmon performance capture files in to .html files for a webserver site.

If your .nmon is called hostname_date_time.nmon and the website pages are at /webpages/docs then use it like this:

	./nmonchart   hostname_date_time.nmon   /webpages/docs/hostname_date_time.html

Then nmonchart Korn shell script needs the Korn shell installed. - it has NOT been tested on Csh or bash. AIX and Linux have Korn Shell called ksh - if your Linux does not have it you should install it.

The script works out if it is running on AIX or Linux and makes two changes based on that. - see the top 10 lines for this.

nmonchart is a fairly simple Korn shell, grep, sed and awk. For data that is in fixed format like physical CPU, run queue and memory stats in the nmon output it is simple to pick out the column and graph it. For data that is not fixed format as it depends on the resources like disk, network, CPUs it is more complex as it has to workout the number of header line (the resource names) and data lines. The graphs like TOPSUM and TOPCMD are quite tricky.

For testing I have supplied a sample nmon file called: sampleC.nmon and a sample output file called: sampleC.html which was generated using the following command: ./nmonchart sampleC.nmon sampleC.html

Examine the sample.html to find out how the data and graphs are generated. - It is using Javascript - The Google-chart library (directly from the web) is used to generate the graphs - - find more information here - - it has lots of functions and pretty graphs - then for each graphs - - There is the data in an array format and the ZZZ data transformed in to a Java date format - - Then the chart drawing options and graph instructions - At the bottom it creates the Javascript buttons and then the config data that is displayed at the bottom of the webpage.

Output file size

Also note nmonchart output files are typically much smaller than the original nmon file. Something like 20% of the size. This is unlike the nmon Analyser file output which can typically be twice the size.

Summary of the graphs

  1. PHYSICAL_CPU - PhysicalCPU, VirtualCPU and entitlement (AIX only LPAR stats))
  2. POOLIDLE - If switched on at the LPAR level PoolIdle and Pool CPU count (AIX only
  3. CPU_UTILisation - User%, System%, Wait% and Idle%
  4. CPU_USE - Logical CPU Core Use (Power SMT or x86 Hyper-threads) Average(User%+System%)
  5. RUNQ - Run Queue in number of processes
  6. PSWITCH - Process Switches as the kernel rns different programs
  7. SYSCALL - Systems calls of processes requesting Kernel operations - Total and read, write calls
  8. READWRITE - Read and Write System calls only
  9. FORKEXEC - Systems call fork (duplicate a process) and exec (overwrite current process with a new program)
  10. FILEIO - System call - number of bytes on the read + write system call - includes disks, network sockets and pipes
  11. REALMEM - Total RAM (MB) and Free RAM (MB) (AIX only)
  12. VIRTMEM - Virtual memory (paging space) Total (MB) and Free (MB) (AIX only)
  13. MEM_LINUX - Total RAM, Free RAM (MB), and other Linux memory stats (Linux Only)
  14. SWAP_LINUX - Swap size (MB) and Swap Free (MB (Linux only)
  15. FSCACHE - File system Cache (numperm) size in percent with minperm% and maxperm%
  16. PAGING - Paging space: pages in (pgin) and out (pgout) plus File system paging: in (pgsin) and out (psout)
  17. SWAPIN - Process swap back in to memory per second
  18. TOPSUM - If your nmon file includes TOP process (nmon -t or nmon -T) - Bubble diagram of top process by total CPU cycles, total I/O KB and max Memory size
    • horizontal axis = CPU cycles in total
    • vertical axis the I/O generated this could be network, disk, pipes, sockets
    • size of the bubble is the memory size
  19. TOPCMD - If your nmon file includes TOP process (nmon -t or nmon -T) - top 15 commands nd their CPU use over time.
  20. NET - Network throughput read and write for each network in KBytes per second
  21. NETPACKET - Numbers of read and write packets per second for each network
  22. NETSIZE - The average number of bytes in each packet for each network read and write
  23. ADAPT_KPS - Throughput in KBytes per second read and write for each disk adapter
  24. ADAPT_TPS - Transactions per second read and write for each disk adapter
  25. DISKBUSY - Disk busy percentage for each disk - Stacked lines
  26. DISKBUSYu - Disk busy percentage for each disk - Unstacked lines
  27. DISKREAD - Disk read throughput in KBytes per second for each disk - Stacked lines
  28. DISKREADu - Disk read throughput in KBytes per second for each disk - Unstacked lines
  29. DISKWRITE - Disk write throughput in KBytes per second for each disk - Stacked lines
  30. DISKWRITEu - Disk write throughput in KBytes per second for each disk - Unstacked lines
  31. DISKBSIZE - Disk block sizes
  32. DISKXTER - Disk Transfers per second
  33. JFS - Journaled File System Percent Full
  34. IPC - Interprocess Communication meaning Semaphores and messages queues.
  35. DGBUSY - Disk Group busy percentage for each disk - Stacked lines
  36. DGBUSYu - Disk Group busy percentage for each disk - Unstacked lines
  37. DGREAD - Disk Group read throughput in KBytes per second for each disk - Stacked lines
  38. DGREADu - Disk Group read throughput in KBytes per second for each disk - Unstacked lines
  39. DGWRITE - Disk Group write throughput in KBytes per second for each disk - Stacked lines
  40. DGWRITEu - Disk Group write throughput in KBytes per second for each disk - Unstacked lines
  41. DGBSIZE - Disk Group block sizes
  42. DGXTER - Disk Group Transfers per second
  43. MHZ - Main CPU MHz for machines that vary these CPU clock frequency
  44. CPUUNTIL_ALL - for Linux it covers all 10 CPU matrix stats
  45. GPU_UTIL - NVidea GPU stats, GPU CPU Utilisation percentage
  46. GPU_MEM- NVidea GPU stats, GPU Memory Utilisation percentage
  47. GPU_TEMP - NVidea GPU stats, Temperature in C
  48. GPU_WATTS - NVidea GPU stats, Electricity Input
  49. GPU_MHZ - NVidea GPU stats, GPU MHz
  50. DISKSERV - Disk Service time in milliseconds
  51. DISKREADSERV - Disk Service time for Reads in milliseconds
  52. DISKWRITESERV - Disk Service time for Writes in milliseconds
  53. DISKWAIT - Disk Wait time in milliseconds

Graphs not supported

  • More than 150 Disks
    • You have the adapter view for overall Disk stats.
    • Data files with crazy numbers of disks in the thousands are just impossible or graph or manage (IMHO).
    • The first 150 plus the adapter totals is a good compromise.
    • Use Disk Groups to reduce the complexity. When starting nmon use -g dgfile or on nmon for Linux -g auto to at least remove the partition stats.
  • Personally, we should get the disk subsystems to do the I/O spreading work and hid a disk mess from the UNIX / Linux System admin team.

Graphs that are not going to happen and why?

  • Individual Logical CPU Utilisation (up to 1536 with the new E880 with 192 cores)
  • Mostly pointless and misleading - they are time sharing the physical CPU cores.
  • Better to study the VM LPAR physical CPU use and UTIL graphs to check the system to user time ratio.

Adding new graphs - I am interested in hearing you ideas on new graphs you would like to have. - They need to add value for most nmon users - Adding graphs from the nmon file is pretty easy as we have already worked though the issues of most formatting options - So it is a cut'n'paste rename the graph and make minor formatting changes for the column, don't forget the button line at the bottom.

- Yet more disks graphs for stupidly high numbers of disks is not a good idea. We could give an option to find the top 20 over used disk names!

nmonchart created web pages or Graph failures

If you transform the nmon data but the webpage does not work - what should you do?

  1. Feel free to send me the original nmon file to investigate
  2. Mostly, the webpage will probably display OK but the buttons will not work
  3. Javascript and Google charts are rather fussy in the syntax.
  4. Sometimes the first few graphs work but later in the page ones will not do anything - this is a good indicator of where the syntax issue is in the file.
  5. If something like the number of disks changes during the collecting of data then you will find the disk buttons and later buttons will not work.
    1. The nmon data collect does NOT handle this by design. This is to reduce nmon CPU time by a large amount.
  6. You could go looking at the .html file looking for oddly formatted lines - I have tried to indent the Java script code to make this possible.
  7. If you work a fix please email the original and the fixed nmonchart scripts.

Testing of nmonchart

Using the internal to IBM website we had more than 200 nmon files to test. This includes - Current AIX 6 and 7 - Back dated AIX 6 and 7 including some with nmon errors of 5 years ago - Old AIX 5 files - mostly to check utilisation before upgrading to POWER8

Current Linux on Power from SUSE, Ubuntu and Red Hat Current Linux on x86 and x86_64 from SUSE, Ubuntu and Red Hat and also other hardware like ARM. Other Linux Distro's and some older releases too. I would like more examples from Mainframe and Linux Distro's like Fedora OpenSUSE, Debian etc. and collected by nmon 15 from within a VM especially overworked machines showing CPU Steal utilisation time.

On strange, rare or older nmon files a lot of work has gone in to support oddly formatted data - nmonchart is now pretty robust ... unless you know differently

Upload and Generate Graphs Website

IBMers can use this internal site:

This is just a starter for ten - you will be required to do significant work. You will have to know HTML, scripting and a little PHP. I am not offering hand holding support to get your working.

I set up a crude upload your nmon file webpage and a cron job to create the .html files and a further script to generate a webpage to list the resulting .html files listed by hostname and then the date and listing the OS.

- nmon_upload.html - the upload webpage - nmon_upload.php - the PHP that actually uploads the file - nmonchart_cron - the cron job that runs nmonchart on new uploads and generated the webpage of hosts and graphs.

This is provided "as is" but comes with loads of assumptions in the code:

  • My apache website /webpages/docs
  • the resulting .html are placed here /webpages/docs/nmonchart
  • the cron generate index.html of graphs here /webpages/docs/nmonchart/index.html
  • the uploads end up here /webpages/docs/nmon_upload
  • the final place for the .nmon files /home/nag/nmoncharttmp

I may try to clean these up and make them generic.

I would actually like some help doing a much better job and the above has a 8 MB limit and is slow and I would like a multiple file upload system. The 60 second cron job is also crude. The index.html needs to automatically refresh once a minute or so.

I actually have a budget to run a WWW upload website to help those not interested in setting up their own. - expect more information as soon as I can set this up.

Cheers Nigel Griffiths Twitter @mr_nmon

Edit - History - Print - Recent Changes - Search
Page last modified on December 09, 2016, at 11:48 AM