Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I want to graph (graphical output would be great, i.e. a .png file) the following situation: I have users A, B, and C. I limit their resources so that when all users run a CPU intensive task at the same time, those processes will use 25%, 25%, and 50% of CPU. I know I can get the real-time stats using top but have no idea what to do with them. I've searched through the huge top man page but haven't found much on the subject of outputting data that can be graphed. Ideally, the graph would show a span of maybe 30 seconds. Any ideas how to achieve this?

share|improve this question

migrated from stackoverflow.com Jun 5 '12 at 16:46

This question came from our site for professional and enthusiast programmers.

    
Flagged. Though, just collecting the raw data somehow would be great. I know you can do it with virt-top (something like virt-top -d $DELAY --csv $CSVFILE --script) but haven't found the equivalent for top –  mart1n Jun 5 '12 at 15:54
add comment

4 Answers 4

up vote 1 down vote accepted

I know I can get the real-time stats using top but have no idea what to do with them

Batch mode could be useful:

   -b : Batch mode operation
        Starts  top  in ’Batch mode’, which could be useful for sending output from top to other programs or
        to a file.  In this mode, top will not accept input and runs until the iterations limit  you’ve  set
        with the ’-n’ command-line option or until killed.

For example:

$ top -b -n 1 -u <user> | awk 'NR > 7 { sum += $9 } END { print sum }'

Ganglia Gmetric can be used to plot a graph for this.

cpu_per_user_gmetric.sh

#!/bin/bash
USERS="a b c"

for user in $USERS; do
    /usr/bin/gmetric --name CPU_per_"$user"_user --value `top -b -n 1 -u $user | awk 'NR>7 { sum += $9; } END { print sum; }'` --type uint8 --unit Percent
done

crontab -l

* * * * * /path/to/cpu_per_user_gmetric.sh

and here's the result:

enter image description here

share|improve this answer
add comment

Perhaps you could use collectd and adapt one of the available plugins? Yes, none of the listed will do exactly what you want, but on the other hand they are pretty simple to modify and I think you could start with for example processes plugin and start working from there.

share|improve this answer
add comment

The tload command represents the pictorial representation of the average system load through ASCII graph. This command can be used to provide the graph on a terminal. The syntax for the command is:

tload [options] [terminal]

If terminal is not provided as the argument to this command, then by default it outputs the graph on the current terminal. So the simplest forms of this command are:

$ tload
share|improve this answer
add comment

Try sar and sadf to gather and prepare the data for easy graphing. http://sebastien.godard.pagesperso-orange.fr/documentation.html

share|improve this answer
    
I did check out sar but could not find a way to associate a process with a specific user, any ideas? –  mart1n Jun 6 '12 at 14:13
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.