11.7. Load

The output of uptime can be used to determine both the system load and uptime, but its output is exceptionally difficult to parse. On a Linux system, this is made much easier to deal with by the existence of the /proc/ file system. cat /proc/loadavg will show you the one minute, five minute, and fifteen minute load average, as well as a couple other numbers I don't know the meaning of (anyone care to fill me in?).

Getting the one minute load average with a Bash construct is easy: temp=$(cat /proc/loadavg) && echo ${temp%% *}. Getting the five minute load average is a little more complex: temp=$(cat /proc/loadavg) && temp=${temp#* } && echo ${temp%% *}. There's probably a simpler way than that (anyone?) and extending this method further to get the 15 minute average would be messy. I'll figure it out sometime ...

A simpler, but more processor intensive method to get an individual number such as the one minute load average, is to use awk: cat /proc/loadavg | awk '{ print $1 }'.

For those without the /proc/ filesystem, you can use uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g" and replace "\1" with "\2" or "\3" depending if you want the one minute, five minute, or fifteen minute load average. This is a remarkably ugly regular expression: send suggestions if you have a better one.

Relative speed: The shell-driven methods each take about 0.14 seconds on an unloaded 486SX25. "cat /proc/loadavg | awk '{ print $1 }' " takes about 0.25 seconds. 'uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g" ' takes about 0.21 seconds.