How can I measure how much CPU and RAM has been used by a command?
I'm trying to measure the memory of a process that I call via the command line (i.e., I want to find out much CPU/RAM the process takes). Is there any command that I can add to the command calling the process that will achieve this?
top
Example of firefox. Find the PID:
ps -aux | grep -i firefox
Then you can use top -p pid
:
top -p 3845
ps
You can also use ps
command, firefox pid is 3845
$ ps -p 3845 -o %cpu,%mem,cmd
%CPU %MEM CMD
11.1 3.7 /usr/lib/firefox/firefox
I am not satisfied with the above mentioned commands, and I found something that you should be interested in.
Monit
sudo apt-get install monit -y
Edit the Monit Config File
sudo nano /etc/monit/monitrc
Enable the web interface
set httpd port 2812
# use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and
# allow 192.168.1.0/255.255.255.0 # allow any host on 192.168.1.* subnet
allow admin:monit # require user 'admin' with password 'monit'
Checking process every 2 secons
## Start Monit in the background (run as a daemon):
set daemon 120 to only 2 # check process every 2 sec
Example Firefox
In the end copy paste the following command
check process firefox
matching "firefox"
Save and Exit
Check your syntax
Fix any problems found – it’s not too tough to figure out what’s going on.
sudo monit -t
Start (or restart) Monit
sudo service monit start
Visit the web interface
http://localhost:2812
if you’re running Ubuntu Desktop, or
Sign in with your admin:monit
credentials
Click on Firefox
Related:
- How to Install Monit
- Monit: check process without pidfile
- Monit FAQ
- Real-world Monit configuration examples
- How can I get the CPU usage and memory usage of a single process on Linux (Ubuntu)?
You can also use these links for help and modify your process.
UPDATE
You can also configure an alert if firefox uses more than 250 MB of ram
check process firefox
matching "firefox"
if totalmem > 250.0 MB for 1 cycles then alert
You can also execute command
if totalmem > 250.0 MB for 1 cycles then exec "path to script"
You can also make a script of Notify-Send
/usr/bin/notify-send firefox "More Than 250 MB OF RAM"
The GNU time command can print the maximum resident set size used by a command.
You do have to make sure to use the /usr/bin/time
command, not the Bash Shell built-in time
keyword.
For an example to measure the firefox command:
/usr/bin/time --format="Size:%MK Cpu:%P Elapsed:%e" firefox &
After using firefox a while, I close it out to get the report:
Size:168644K Cpu:30% Elapsed:226.34
While it is possible to use the TIME environment variable to set the default format I've found it more flexible to set up individual bash aliases with specific formats. So for the above I would add to my ~/.bash_aliases
file:
alias ztm="/usr/bin/time --format=\"Size:%MK Cpu:%P Elapsed:%e\""
So that from my Bash Shell I could just enter:
ztm firefox &
References:
man time
info time
-
man 2 getrusage
# - Shows which measures are available on Linux, the others show as zero