== Getting live network bandwidth numbers on Solaris After I wrote [[netvolmon for Linux ../linux/SeeingNetworkBandwidth]], I started getting curious about how much bandwidth our current Solaris NFS servers were using. Unfortunately, Solaris's version of _ifconfig_ does not report byte counts; fortunately, the kernel does keep this information and you can dig it out with _kstat_ (information courtesy of [[here http://www.brendangregg.com/Perf/network.html]], which has a bunch of more sophisticated programs to report on this stuff). The magic _kstat_ incantation is '((kstat -p "*:*::*bytes64"))', which gets you the obytes64 and rbytes64 counters for the device; this works on at least Solaris 8 and Solaris 10. (In this Solaris does Linux one better, since a 32-bit Linux machines use 32-bit network counters and on a saturated gigabit link they can roll over in under 20 seconds.) Armed with this we can write the obvious Solaris version of _netvolmon_: #!/bin/sh # usage: netvolmon DEV [INTERVAL] DEV=$1 IVAL=${2:-5} getrxtx() { kstat -p "*:*:$1:*bytes64" | awk '{print $2}' } rxtx=`getrxtx $DEV` while sleep $IVAL; do nrxtx=`getrxtx $DEV` (echo $IVAL $rxtx $nrxtx) | awk 'BEGIN { msg = "%6.2f MB/s RX %6.2f MB/s TX\n"} {rxd = ($4 - $2) / (1024*1024*$1); txd = ($5 - $3) / (1024*1024*$1); printf msg, rxd, txd}' rxtx="$nrxtx" done Vaguely to my surprise, it turns out that Solaris 8 awk doesn't allow you to split _printf_ (and presumably _print_) statements over multiple lines. The Solaris shell is backwards and doesn't support the POSIX shell _$(...)_ syntax, even in Solaris 10, so this version uses the less pleasant backquote syntax. (This can easily be extended to report packets per second as well; the device counters you want are 'opackets64' and 'rpackets64'. I didn't put it in this version for a petty reason, namely that it would make this entry too wide, but you can get the full versions for both Solaris and Linux [[here ]].)