Last updated on February 19, 2021 by Dan Nanni
Sometimes you may want to know the CPU usage of a particular Linux process. As the CPU usage of a process can fluctuate over its lifetime, you will want to measure the average CPU usage or CPU utilization of the process. For this purpose, a Linux tool set called sysstat may come in handy, which contains a collection of performance monitoring tools for Linux, reporting statistics on disk I/O, CPU, memory, networking, and other system activities. One of the utilities contained in sysstat is pidstat, which can measure the average CPU usage of Linux processes.
In the following let's find out how to measure the average CPU utilization of a particular Linux process, or process-level CPU usage of all available Linux processes with pidstat tool.
sysstat on LinuxIn order to use pidstat, you need to install the sysstat package as follows.
sysstat on Ubuntu, Debian or Linux Mint$ sudo apt install sysstat
sysstat on CentOS, RHEL or Fedora$ sudo yum install sysstat
sysstat from the SourceIf the sysstat package is not available on your Linux system, you can easily build it from the source as follows.
$ tar -xf sysstat-12.5.3.tar.gz $ cd sysstat-12.5.3/ $ ./configure $ make $ sudo make install
pidstatOnce you have installed sysstat, you can use pidstat to measure the average CPU usage of a Linux process as follows.
$ pidstat 5 -p 11579
In this example, I am measuring the average CPU usage of a Linux process with PID 11579, which is measured over five-second interval. This command will refresh the average CPU usage every five second. If you press Ctrl-C, the command will exit and print the overall average CPU usage. The output indicates that the process consumes 5.5% of a single CPU core on average. The CPU field next to %CPU denotes the CPU processor ID to which the process is attached (in case there are more than one CPU processors on your system). The %usr and %system columns indicate how much of the CPU is executed in the user space or in the kernel, respectively.
Note that you need to provide the interval parameter (e.g., 5) which specifies the amount of time in seconds between each report. Without the interval parameter, the %CPU reported by pidstat will be the average CPU usage over the period since system startup (boot).
pidstatIf you would like to measure process-level CPU usage for all running processes, you can simply use -p ALL option with pidstate.
$ pidstat 60 -p ALL
The above command will report the average CPU usage for all running processes every one minute.
If you want to feed the output of pidstat into a shell script, you can use the following bash script. This script measures the process-level average CPU usage of the entire system (averaged over one minute).
#!/bin/bash
output=$(timeout 60.1 pidstat 60 -p ALL)
IFS='
'
for line in $output; do
# extract N-th column with awk
pid=`echo $line | awk '{ print $4}'` # PID
pcpu=`echo $line | awk '{ print $9}'` # percentage CPU
cpu=`echo $line | awk '{ print $10}'` # CPU ID
cmd=`echo $line | awk '{ print $11}'` # command
echo "$pid $pcpu $cpu $cmd"
done
If you find this tutorial useful, feel free to share it with your friends on your social network.
This website is made possible by minimal ads and your gracious donation via PayPal or credit card
Please note that this article is published by Xmodulo.com under a Creative Commons Attribution-ShareAlike 3.0 Unported License. If you would like to use the whole or any part of this article, you need to cite this web page at Xmodulo.com as the original source.
Xmodulo © 2021 ‒ About ‒ Write for Us ‒ Feed ‒ Powered by DigitalOcean