本就想着写一下Linux性能监测这方面的文章,哪里知道写着写着都出来了。好了,为了更好的完成整个系列,索性把整个系列关联到的所有Linux命令也都重新整理一遍。
话又说回来,这些命令网上都快整理烂了,我这里再整理一遍,不是脱裤子放屁,多此一举么?这还真不是,我在整理这些Linux命令时,我都会把Google搜索出来的、百度搜索出来的相关结果的前两页都会仔细的阅读一遍,去其糟粕,取其精华;这样,我的这篇文章基本就包含了网上其它相关文章的大部分优点,同时再结合我自身的工作经验,我自认为我的这篇文章应该不会太差。
pidstat
命令是干什么的呢?说实话,这个命令,我之前压根就没有用过的,我也不知道它有什么用。但是在我总结《Linux性能监测:IO篇》这篇文章时,其中有篇文章讲到了 pidstat
命令,好家伙,搞了这么几年,居然不知道这个命令,更不要说用了。后来Google了一下,大概了解了一下,觉的很有必要单独用一篇文章来总结一下它,所以就有了这篇文章。
废话少说,直入正题。 pidstat
是sysstat工具的一个命令,用于监控全部或指定进程的CPU、内存、线程、设备IO等系统资源的占用情况。 pidstat
首次运行时显示自系统启动开始的各项统计信息,之后运行 pidstat
将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
敲黑板了,注意重点内容, pidstat
可以监控到进程级别的信息;这就意味着我们就可以直接定位问题源头。话不多说,我们继续。
pidstat
是sysstat工具的一个命令,如果服务器上没有现成的,不要着急。
apt-get install sysstat
yum install sysstat
pidstat
常用命令格式如下:
pidstat [参数] [时间] [次数]
常用参数说明如下:
-u 默认的参数,显示各个进程的CPU使用统计 -r 显示各个进程的内存使用统计 -d 显示各个进程的IO使用情况 -p 指定进程号 -w 显示每个进程的上下文切换情况 -t 显示选择任务的线程的统计信息外的额外信息
下面就对我们常用的使用方式进行详细的总结。
pidstat
和 pidstat -u -p ALL
pidstat
和 pidstat -u -p ALL
是等效的,默认显示所有进程的CPU使用率 [root@Test-Server ~]# pidstat Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 01/11/2019 _x86_64_ (1 CPU) 11:23:19 PM UID PID %usr %system %guest %CPU CPU Command 11:23:19 PM 0 1 0.00 0.00 0.00 0.00 0 systemd 11:23:19 PM 0 2 0.00 0.00 0.00 0.00 0 kthreadd 11:23:19 PM 38 856 0.00 0.00 0.00 0.00 0 ntpd 11:23:19 PM 1000 3120 0.00 0.00 0.00 0.00 0 php-fpm 11:23:19 PM 1000 3121 0.00 0.00 0.00 0.00 0 php-fpm 11:23:19 PM 1000 3122 0.00 0.00 0.00 0.00 0 php-fpm
输出内容详解:
UID
:用户ID
PID
:进程ID
%usr
:进程在用户空间占用CPU的百分比
%system
:进程在内核空间占用CPU的百分比
%guest
:任务花费在虚拟机上的CPU使用率(运行在虚拟处理器)
%CPU
:任务总的CPU使用率
CPU
:正在运行这个任务的处理器编号
Command
:这个任务的命令名称
pidstat -r
说明:输出进程内存使用情况统计
输出:
[root@Test-Server ~]# pidstat -r Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 01/12/2019 _x86_64_ (1 CPU) 11:18:12 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command 11:18:12 PM 0 1 0.12 0.00 125328 2068 0.11 systemd 11:18:12 PM 1000 25079 0.00 0.00 11772 0 0.00 mysqld_safe 11:18:12 PM 1000 25327 0.27 0.00 432104 38080 2.02 php-fpm 11:18:12 PM 1000 25777 0.02 0.00 1051940 119704 6.36 mysqld 11:18:12 PM 0 26437 0.00 0.00 390396 1244 0.07 php-fpm 11:18:12 PM 1000 29976 0.26 0.00 431712 37464 1.99 php-fpm
输出重点内容详解:
minflt/s
:从内存中加载数据时每秒出现的次要错误的数目,这些不要求从磁盘载入内存页面
majflt/s
:从内存中加载数据时每秒出现的主要错误的数目,这些要求从磁盘载入内存页面
VSZ
:虚拟地址大小,虚拟内存的使用KB
RSS
:长期内存使用,任务的不可交换物理内存的使用量KB
%MEM
:进程使用的物理内存百分比, top
命令也会输出该字段
pidstat -d -p 29976 1 5
说明:每隔一秒,一共输出5次进程ID为29976的IO统计信息
输出:
[root@Test-Server ~]# pidstat -d -p 29976 1 5 Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 01/12/2019 _x86_64_ (1 CPU) 11:29:19 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 11:29:20 PM 1000 29976 0.00 0.00 0.00 php-fpm 11:29:21 PM 1000 29976 0.00 0.00 0.00 php-fpm 11:29:22 PM 1000 29976 0.00 0.00 0.00 php-fpm 11:29:23 PM 1000 29976 0.00 0.00 0.00 php-fpm 11:29:24 PM 1000 29976 0.00 0.00 0.00 php-fpm Average: 1000 29976 0.00 0.00 0.00 php-fpm
输出重点内容详解:
kB_rd/s
:进程每秒从磁盘读取的数据量(以kB为单位)
kB_wr/s
:进程每秒向磁盘写入的数据量(以kB为单位)
kB_ccwr/s
:任务写入磁盘被取消的速率(KB);当任务截断脏的pagecache的时候会发生。
pidstat -t -p 10538
说明:显示选择任务的线程的统计信息外的额外信息
输出:
[root@Test-Server ~]# pidstat -t -p 10538 Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 01/13/2019 _x86_64_ (1 CPU) 12:38:04 AM UID TGID TID %usr %system %guest %CPU CPU Command 12:38:04 AM 0 10538 - 0.41 0.07 0.00 0.47 0 java 12:38:04 AM 0 - 10538 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10539 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10540 0.00 0.00 0.00 0.01 0 |__java 12:38:04 AM 0 - 10541 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10542 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10543 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10544 0.00 0.00 0.00 0.00 0 |__java 12:38:04 AM 0 - 10545 0.04 0.02 0.00 0.05 0 |__java 12:38:04 AM 0 - 10551 0.04 0.01 0.00 0.05 0 |__java
输出重点内容详解:
TGID
:主线程的标识
TID
:线程ID
总结这些Linux命令总是无趣的,但是这些简单的命令却是我们完成一些了不起操作的基石;所以,怎么说!再无趣,也要学习吧。
失眠的晚上,完成这篇文章。
果冻想,认真玩技术的地方。
2019年1月12日,于内蒙古呼和浩特。