目录
一.mpstat
二、Iostat
三、Iotop
四、Pidstat
五、Lsof
-p 参数
mpstat概述
mpstat (multiprocessor state) 可以查看所有cpu的平均负载,也可以查看指定cpu的负载。所以mpstat其实就是主要查看CPU负载的一个工具。是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标。
命令安装
它是Linux性能工具集sysstat中的一个工具,所以我们要装上sysstat,安装方法随不同的系统略有不同,sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行
yum install -y sysstat #安装mpstat命令软件
命令语法格式:
mpstat [-P {cpu|ALL}] [interval [count]]
参数 | 描述 |
---|---|
-P {cpu | ALL} |
internval | 相邻两次采样的间隔时间 |
count | 采样的次数,count只能和internval一起使用 |
mpstat各项参数介绍
显示参数 |
描述 |
CPU |
显示的是某个CPU还是全部CPU all=全部 |
%usr |
表示用户所有使用的CPU百分比 |
%nice |
表示使用nice值的CPU的百分比. |
%sys |
表示内核进程使用的CPU百分比. |
%iowait |
表示等待进行IO所使用的CPU时间百分比。 |
%irq |
表示用于处理系统中断的CPU百分比 |
%soft |
表示用于软件中断的CPU百分比 |
%steal |
虚拟机强制CPU等待的时间百分比 |
%guest |
虚拟机占用CPU时间的百分比 |
%gnice |
CPU运行niced guest虚拟机所花费的时间百分比 |
%idle |
CPU的空闲时间的百分比 |
此处我们主要查看%idle值和%iowait,进行cpu负载时信息分析 |
|
平均负载查看
使用uptime命令可以查看系统平均负载
当系统变慢,用top或uptime来了解系统的负载情况。
系统平均负载是指在特定时间间隔内运行队列中的平均进程数
如果单个CPU过去一分钟平均负载不大于3的话,那么系统的性能是良好的。2核是6依次类推
mpstat主要用在当系统变慢,如ssh过去输入命令特别卡,平均负载增大时,我们想判断到底是CPU的使用率增大了,还是IO压力增大的情况。
iostat概述
iostat主要用于监控系统设备的IO负载情况,iostat提供了丰富的参数给我们查询各种维度的io数据, iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
命令格式
iostat [-参数] [指定磁盘] [采集周期频率] [采集次数]
命令参数
-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况
显示所有设备负载情况
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
device:磁盘名称
tps:每秒钟发送到的I/O请求数.
kB_read/s:每秒读取的kB数.
kB_wrtn/s:每秒写入的kB数.
kB_read:读入的kB总数.
kB_wrtn:写入的kB总数.
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
iostat -d sda
显示指定硬盘信息
iostat -t
报告每秒向终端读取和写入的字符数。
iostat -d -k 1 1
查看TPS和吞吐量信息
iostat -d -x -k 1 1
查看设备使用率(%util)、响应时间(await)
rrqm/s:采样周期内,每秒merge的读请求数量
wrqm/s:采样周期内,,每秒merge的写请求数量
r/s:采样周期内,每秒的读请求数量
w/s:采样周期内,每秒的写请求数量
rsec/s:采样周期内,每秒读取的扇区数量(通过参数-k -m可以将单位改成kb、mb)
wsec/s:采样周期内,每秒写入的扇区数量(通过参数-k -m可以将单位改成kb、mb)
avgrq-sz:采样周期内,平均IO请求的大小(以扇区为单位)
avgqu-sz:采样周期内,平均IO队列长度(在等待被执行的IO请求)
await:采样周期内,IO请求的平均时间(排队时长+IO服务时长),单位是毫秒
svctm:采样周期内,IO请求的平均服务时间,排除排队的时长,单位是毫秒(该统计维度的数值不可信,后面的iostat版本会移除这项统计值)
%util:采样周期内,IO忙碌的时间百分比,如果这个值接近100,说明此时IO已经满负荷了
iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况。iotop 监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。它显示每个进程/线程读写 I/O 带宽。它同样显示当等待换入和等待 I/O 的线程/进程花费的时间的百分比。
安装
参数
参数 | 描述 |
-o | 只显止在产生IO的进程或范程,运行过程中,可以通过按o随时切换 |
-b | 非交互式下运行,一般用来记录日志 |
-n NUM | 设置监控〔显六)次数,王些川于非众互式,默认无限 |
-d SEC | 设置显示的间府秒数,支持非整数 |
-p PID | 只显六指定讲程(PID)的信息 |
-u USER |
显示指定用广的进程信息 |
-P | 只吊示进积,不显示所有线中 |
-a | 累积的LIO,显示从iotop启动后每个进程累积的LO总数,便于诊断问题 |
-k | 示使用KB单位 |
-t | 非交互模式下,加上时问鼠 |
-p | 只在第一次监测时显示列名.去除头部一些行:这个参数可以设置最多3次来移除头部行: -q列头8只在最初交互显示一次;-qq列头部不显示;-qqq,I/O的总结不显示 |
左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序
o:只显示有IO输出的进程
p:进程/线程的显示方式的切换
a:显示累积使用量
q:退出
实例
iotop -o 仅显示实际执行I/O的进程或线程,只显示在划硬盘的程序
显示指定PID
-b是非交互式,-n 1指监控1次,-d 6表示6秒刷新一次,-p是只显示进程
显示指定用户
-b是非交互式,-n 2指监控2次,-d 5 表示5秒刷新一次,-u是指定用户
打印指定PID的时间戳
-t表示打印时间戳,-k是单位为KB
pidstat可用于监控全部或指定进程的CPU、内存、IO等系统资源的占用情况
与vmstat可用查询的资源相似,但是相对对于某一个进程进行监控的话,vmstat多少有点吃力,但是pidstat可用很轻松的完成,所以可用根据使用场景,来使用资源监控工具
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
常用的参数:
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
详细说明
PID:进程ID
%usr:进程在用户空间占用cpu的百分比
%system:进程在内核空间占用cpu的百分比
%guest:进程在虚拟机占用cpu的百分比
%CPU:进程占用cpu的百分比
CPU:处理进程的cpu编号
Command:当前进程对应的命令
内存使用情况统计pidstat(-r)
PID:进程标识符
Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
VSZ:虚拟地址大小,虚拟内存的使用KB
RSS:常驻集合大小,非交换区五里内存使用KB
Command:当前进程对应的命令
报告IO统计显示以下信息:
PID:进程id
kB_rd/s:每秒从磁盘读取的KB
kB_wr/s:每秒写入磁盘KB
kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
COMMAND:当前进程对应的命令
显示每个进程的上下文切换情况(-w)
pidstat -w -p 11669
PID:进程id
Cswch/s:每秒主动任务上下文切换数量
Nvcswch/s:每秒被动任务上下文切换数量
Command:命令名
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
命令格式
lsof+(选项)
选项
选项 | 描述 |
-a | 列出打开文什行r在的进程: |
-C<进程名> | 列出指定进程所打川的文件; |
-g | 列出GID号进程详情; |
-d<文件号> | 列出占用该文件号的进程; |
+d<月录> | 列出月录下被HT开的文件: |
+D<目录> | 递归列出目录下被打开的文什; |
-n<目录就 | 列出使用NFS的义件: |
-j<条件> | 列出符合条:什的进积。〔4、6、协议、:端口、@ip ) |
-p<进程号> | 列出指定进程号所打开的文件; |
-u | 列出UID号进祝详情; |
-h | 显示帮助信息; |
-v | 显示版本信息。 |
列出所有打开的文件:
lsof
lsof输出各列信息的意义如下
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
FD文件描述符列表
cwd:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,
lnn:library references (AIX)(库引用);
er:fd信息错误
jld:监控目录
ltx:共享库文本
mxx :hex memory-mapped type number xx(十六进制内存映射类型号xx);
m86:DOS Merge mapped file(DOS合并映射文件);
mem:内存映射文件
mmap:内存映射设备
pd:父目录
rtd:根目录
tr:内核跟踪文件
v86 VP/ix mapped file(VP/IX映射文件);
0:表示标准输出
1:表示标准输入
2:表示标准错误
执行命令 lsof -p 1,列出 1号 进程打开的文件,如下所示: