When something goes wrong on your Linux server or desktop, is important to understand which process is taking all the resources, in the past I’ve published some information about top
and htop
, two great tools to have a general overview of your system with just a glance, but sometimes you need to gather more information of a particular process and for this task the command pidstat
is perfect.
Pidstat
is a statistics report tool for Linux which is part of the sysstat utilities. The pidstat
command is used for monitoring individual tasks currently being managed by the Linux kernel. It writes to standard output activities for every task selected with option -p or for every task managed by the Linux kernel if option -p ALL has been used. Not selecting any tasks is equivalent to specifying -p ALL but only active tasks (tasks with non-zero statistics values) will appear in the report.
You can use PID’s and even regular expressions on the process names to filter them out.
Basic usage
The easiest way to use pidstat
is with the option -p ALL, this will print on the screen a list of all the processes running and the resources that they are using:
#pidstat -p ALL Linux 3.6.5 01/19/13 _i686_ (4 CPU) 19:03:10 PID %usr %system %guest %CPU CPU Command 19:03:10 1 0.00 0.00 0.00 0.00 1 init 19:03:10 2 0.00 0.00 0.00 0.00 1 kthreadd 19:03:10 3 0.00 0.00 0.00 0.00 0 ksoftirqd/0 19:03:10 4 0.00 0.00 0.00 0.00 0 kworker/0:0 19:03:10 5 0.00 0.00 0.00 0.00 0 kworker/0:0H 19:03:10 6 0.00 0.00 0.00 0.00 1 kworker/u:0 19:03:10 7 0.00 0.00 0.00 0.00 0 kworker/u:0H 19:03:10 8 0.00 0.00 0.00 0.00 0 migration/0 19:03:10 9 0.00 0.00 0.00 0.00 1 migration/1 19:03:10 10 0.00 0.00 0.00 0.00 1 kworker/1:0 19:03:10 11 0.00 0.00 0.00 0.00 1 kworker/1:0H 19:03:10 12 0.00 0.00 0.00 0.00 1 ksoftirqd/1 19:03:10 13 0.00 0.00 0.00 0.00 2 migration/2 19:03:10 14 0.00 0.00 0.00 0.00 2 kworker/2:0 19:03:10 15 0.00 0.00 0.00 0.00 2 kworker/2:0H 19:03:10 16 0.00 0.00 0.00 0.00 2 ksoftirqd/2 19:03:10 17 0.00 0.00 0.00 0.00 3 migration/3 19:03:10 18 0.00 0.00 0.00 0.00 3 kworker/3:0 19:03:10 19 0.00 0.00 0.00 0.00 3 kworker/3:0H ..... 19:03:10 293 0.00 0.00 0.00 0.00 1 nfsiod 19:03:10 294 0.00 0.00 0.00 0.00 1 cifsiod 19:03:10 297 0.00 0.00 0.00 0.00 1 jfsIO 19:03:10 298 0.00 0.00 0.00 0.00 1 jfsCommit 19:03:10 302 0.00 0.00 0.00 0.00 1 jfsSync 19:03:10 303 0.00 0.00 0.00 0.00 1 xfsalloc 19:03:10 304 0.00 0.00 0.00 0.00 1 xfs_mru_cache 19:03:10 305 0.00 0.00 0.00 0.00 1 xfslogd 19:03:10 306 0.00 0.00 0.00 0.00 1 glock_workqueue 19:03:10 307 0.00 0.00 0.00 0.00 1 delete_workqueu 19:03:10 308 0.00 0.00 0.00 0.00 1 gfs_recovery 19:03:10 309 0.00 0.00 0.00 0.00 1 crypto 19:03:10 873 0.00 0.00 0.00 0.00 2 khvcd 19:03:10 965 0.00 0.01 0.00 0.01 0 kworker/0:1H 19:03:10 992 0.00 0.00 0.00 0.00 3 kpsmoused 19:03:10 1030 0.00 0.00 0.00 0.00 3 deferwq 19:03:10 1033 0.00 0.00 0.00 0.00 0 kjournald 19:03:10 1036 0.00 0.00 0.00 0.00 0 kworker/0:1 19:03:10 1069 0.00 0.00 0.00 0.00 0 udevd 19:03:10 1106 0.00 0.00 0.00 0.00 3 kworker/3:1 19:03:10 2039 0.00 0.00 0.00 0.00 0 dhcpcd-bin 19:03:10 2149 0.00 0.00 0.00 0.00 0 rsyslogd 19:03:10 2174 0.00 0.00 0.00 0.00 0 atd 19:03:10 2188 0.00 0.00 0.00 0.00 1 monit 19:03:10 2206 0.00 0.00 0.00 0.00 0 cron 19:03:10 2215 0.00 0.00 0.00 0.00 1 dropbear 19:03:10 2260 0.00 0.00 0.00 0.00 1 mysqld_safe 19:03:10 2416 0.16 0.08 0.00 0.23 2 mysqld 19:03:10 2417 0.00 0.00 0.00 0.00 3 logger 19:03:10 2419 0.00 0.00 0.00 0.00 2 php5-fpm 19:03:10 2425 0.00 0.09 0.00 0.09 2 flush-202:0 19:03:10 2471 0.00 0.00 0.00 0.01 1 ntpd 19:03:10 2523 0.00 0.00 0.00 0.00 1 mingetty 19:03:10 2694 0.00 0.00 0.00 0.00 2 kworker/2:1H 19:03:10 2734 0.00 0.00 0.00 0.00 3 kworker/3:1H 19:03:10 2736 0.00 0.00 0.00 0.00 1 kworker/1:1H 19:03:10 2776 0.00 0.00 0.00 0.00 0 jbd2/xvdc1-8 19:03:10 2777 0.00 0.00 0.00 0.00 3 ext4-dio-unwrit 19:03:10 3526 0.00 0.00 0.00 0.00 2 varnishd 19:03:10 3527 0.00 0.00 0.00 0.01 1 varnishd 19:03:10 4972 0.02 0.00 0.00 0.03 3 php5-fpm 19:03:10 4977 0.03 0.00 0.00 0.03 0 php5-fpm 19:03:10 4992 0.02 0.00 0.00 0.02 1 php5-fpm 19:03:10 5087 0.01 0.00 0.00 0.01 0 php5-fpm 19:03:10 5091 0.01 0.00 0.00 0.02 3 php5-fpm |
Time Interval
As you can see the former command prints a very long list with all your processes, useful sometimes but perhaps you just want to know which processes are using resources in this moment and for this task is much better to run pidstat
with a number as option, this number specifies the amount of time in seconds between each report.
# pidstat 1 Linux 3.6.5 01/19/13 _i686_ (4 CPU) 19:22:28 PID %usr %system %guest %CPU CPU Command 19:22:29 5725 0.00 0.99 0.00 0.99 0 pidstat 19:22:29 30634 1.98 0.00 0.00 1.98 0 nginx 19:22:29 PID %usr %system %guest %CPU CPU Command 19:22:30 30634 4.00 0.00 0.00 4.00 0 nginx 19:22:30 PID %usr %system %guest %CPU CPU Command 19:22:31 2416 3.00 1.00 0.00 4.00 2 mysqld 19:22:31 3527 0.00 1.00 0.00 1.00 2 varnishd 19:22:31 4977 14.00 2.00 0.00 16.00 3 php5-fpm 19:22:31 4992 26.00 3.00 0.00 29.00 1 php5-fpm 19:22:31 5685 13.00 2.00 0.00 15.00 0 php5-fpm 19:22:31 5725 1.00 1.00 0.00 2.00 1 pidstat 19:22:31 30634 1.00 0.00 0.00 1.00 0 nginx 19:22:31 PID %usr %system %guest %CPU CPU Command 19:22:32 965 0.00 1.00 0.00 1.00 0 kworker/0:1H 19:22:32 2416 1.00 1.00 0.00 2.00 2 mysqld 19:22:32 4977 1.00 0.00 0.00 1.00 3 php5-fpm 19:22:32 5093 34.00 3.00 0.00 37.00 0 php5-fpm 19:22:32 5685 15.00 2.00 0.00 17.00 2 php5-fpm |
This report is much better as it shows only process whose use of resources changes between the time interval you have specified.
You can also specify a second number as count parameter. The value of count determines the number of reports generated at interval seconds apart. If the interval parameter is specified without the count parameter, the pidstat
command generates reports continuously.
Specify which kind of resources you want to monitor
So far we haven’t specified which kind of resource we are interested in, and so as default pidstat
show information about CPU usage, but this software is capable of give us much more information using these options:
- -d Report I/O statistics.
- -r Report page faults and memory utilization.
- -u Report CPU utilization
You can also specify multiple resources, so to display information about CPU and memory you can use the command:
# pidstat 2 2 -u -r Linux 3.6.5 01/19/13 _i686_ (4 CPU) 19:51:08 PID %usr %system %guest %CPU CPU Command 19:51:10 2416 1.00 1.00 0.00 1.99 0 mysqld 19:51:10 5091 35.32 0.00 0.00 35.32 2 php5-fpm 19:51:10 5937 0.00 0.50 0.00 0.50 0 pidstat 19:51:08 PID minflt/s majflt/s VSZ RSS %MEM Command 19:51:10 2416 193.53 0.00 89296 32156 6.33 mysqld 19:51:10 3527 2.99 0.00 314384 29084 5.72 varnishd 19:51:10 5091 191.04 0.00 166464 59596 11.73 php5-fpm 19:51:10 5937 101.00 0.00 1768 748 0.15 pidstat 19:51:10 PID %usr %system %guest %CPU CPU Command 19:51:12 3527 0.00 0.50 0.00 0.50 1 varnishd 19:51:12 5728 4.50 0.00 0.00 4.50 0 php5-fpm 19:51:12 5937 0.00 0.50 0.00 0.50 0 pidstat 19:51:10 PID minflt/s majflt/s VSZ RSS %MEM Command 19:51:12 3527 4.00 0.50 314384 29084 5.72 varnishd 19:51:12 5728 16.00 0.00 165664 59260 11.66 php5-fpm 19:51:12 5937 104.50 0.00 1768 784 0.15 pidstat Average: PID %usr %system %guest %CPU CPU Command Average: 2416 0.50 0.50 0.00 1.00 - mysqld Average: 3527 0.00 0.25 0.00 0.25 - varnishd Average: 5091 17.71 0.00 0.00 17.71 - php5-fpm Average: 5728 2.24 0.00 0.00 2.24 - php5-fpm Average: 5937 0.00 0.50 0.00 0.50 - pidstat Average: PID minflt/s majflt/s VSZ RSS %MEM Command Average: 2416 97.01 0.00 89296 32156 6.33 mysqld Average: 3527 3.49 0.25 314384 29084 5.72 varnishd Average: 5091 95.76 0.00 166464 59596 11.73 php5-fpm Average: 5728 7.98 0.00 165664 59222 11.65 php5-fpm Average: 5937 102.74 0.00 1768 766 0.15 pidstat |
Show only certain processes
So far we have analysed all the running processes, but perhaps you want to monitor just a specific process, to do this you can use the flag -p with a PID number or use the option -C with a string, this display only tasks whose command name includes the string you have specified.
# pidstat -C mysql Linux 3.6.5 01/19/13 _i686_ (4 CPU) 20:12:40 PID %usr %system %guest %CPU CPU Command 20:12:40 2260 0.00 0.00 0.00 0.00 1 mysqld_safe 20:12:40 2416 0.16 0.08 0.00 0.23 3 mysqld |
You can mix the -C parameter with all the others, so you can choose a time interval or which kind of resource
Popular Posts:
- None Found
Thank you for this nice article, but why doesn’t the htop link to this article? – http://linuxaria.com/article/monitoring-process-top-htop