Whole document tree
    

Whole document tree

Load

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.