- iostat - 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息
- mpstat - 关于CPU的详细信息(单独输出或者分组输出)
- pidstat - 关于运行中的进程/任务、CPU、内存等的统计信息
- vmstat - 获得UNIX系统有关进程、虚存、页面交换空间及CPU活动的信息
- sar - 保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息
- sadc - 系统活动数据收集器,用于收集sar工具的后端数据.
- sa1 - 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用
- sa2 - 配合sar工具使用,产生每日的摘要报告
- sadf - 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出
- nfsiostat - NFS(Network File System)的I/O统计信息
- cifsiostat - CIFS(Common Internet File System)的统计信息
-
包管理工具安装:
sudo apt-get install sysstat
或yum -y install sysstat
-
编译安装:
git clone git://github.com/sysstat/sysstat && cd sysstat && ./configure && make && make install
root@localhost ~ : iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
[ [ -H ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]
- -c: 显示CPU使用情况
- -d: 显示磁盘使用情况
- -N: 显示磁盘阵列(LVM) 信息
- -n: 显示NFS 使用情况
- -k: 以 KB 为单位显示
- -m: 以 M 为单位显示
- -t: 报告每秒向终端读取和写入的字符数和CPU的信息
- -V: 显示版本信息
- -x: 显示详细信息
- -p:[磁盘] 显示磁盘和分区的情况
root@localhost ~ : iostat -x
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.04 0.00 0.00 99.93
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
loop0 0.00 0.03 0.00 0.00 0.35 80.78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop1 0.00 0.07 0.00 0.00 0.37 78.71 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 1.21 3.93 0.00 1.52 0.00 2.00 0.67 504.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.02 0.00 13.02 0.35 78.60 0.00 0.00 0.00 42.31 2.40 6.76 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.00
sdc 0.00 0.12 0.00 3.37 0.31 61.10 0.00 0.00 0.00 43.17 1.54 6.85 0.00 0.00 0.00 0.00 0.10 5.31 0.00 0.00
sdd 0.00 0.11 0.00 24.23 0.35 34.43 0.13 2.64 0.11 44.84 6.31 19.84 0.02 1.33 0.00 0.00 1.41 77.79 0.00 0.11
avg-cpu
属性值说明:
- %user - CPU处在用户模式下的时间百分比。
- %nice - CPU处在带NICE值的用户模式下的时间百分比。
- %system - CPU处在系统模式下的时间百分比。
- %iowait - CPU等待输入输出完成时间的百分比。
- %steal - 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle - CPU空闲时间百分比。
解析1: 如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
- Device 磁盘名称
- rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
- wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
- r/s: 每秒完成的读 I/O 设备次数。即 rio/s
- w/s: 每秒完成的写 I/O 设备次数。即 wio/s
- rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
- wkB/s: 每秒写K字节数。是 wsect/s 的一半。
- avgrq-sz: 每个请求平均大小,单位是扇区数,一般在200~400之间算是正常和理想的状态,如果这个值比较小,比方说只在100左右,说明太多的IO请求没有被合并,或者大的IO请求被“打散”,在写操作时,过多小的请求会造成磁盘磁头的频繁移动,降低IO性能。
- aqu-sz: 平均请求队列长度,这个值在正常的系统中不应超过113太多,如果在200左右,甚至上千那说明发生了IO拥塞,而系统还在向IO请求队列中放请求(有一个例外是在执行sync,fsync操作时,该值到达最大值8192是正常的)
- rsec/s: 每秒读扇区数。
- wsec/s: 每秒写扇区数。
- r_await:每个读操作平均所需的时间(不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间)
- w_await:每个写操作平均所需的时间(不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间)
- await: 平均每次设备I/O操作的等待时间 (毫秒)。
- svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
- %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比.
解析2: 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果aqu-sz比较大,也表示有当量io在等待。
root@localhost ~ : mpstat --help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -n ] [ -u ] [ -V ]
[ -I { SUM | CPU | SCPU | ALL } ] [ -N { <node_list> | ALL } ]
[ --dec={ 0 | 1 | 2 } ] [ -o JSON ] [ -P { <cpu_list> | ALL } ]
-
-P {|ALL} : 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
-
internal 相邻的两次采样的间隔时间、
-
count 采样的次数,count只能和delay一起使用
-
当没有参数时,mpstat则显示系统启动以后所有信息的平均值。
-
有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。
root@localhost ~ : mpstat
16:59:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
16:59:11 all 0.03 0.00 0.04 0.00 0.00 0.00 0.00 0.00 0.00 99.93
计算公式:
total_cur = user + system + nice + idle + iowait + irq + softirq
total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq
user = user_cur – user_pre
total = total_cur - total_pre
其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点.
- CPU 处理器ID
- %usr 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 usr/total*100
- %nice 在internal时间段里,nice值为负进程的CPU时间(%) nice/total*100
- %sys 在internal时间段里,核心时间(%) system/total*100
- %iowait 在internal时间段里,硬盘IO等待时间(%) iowait/total*100
- %irq 在internal时间段里,硬中断时间(%) irq/total*100
- %soft 在internal时间段里,软中断时间(%) softirq/total*100
- %steal 显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比 steal/total*100
- %guest 显示运行虚拟处理器时CPU花费时间的百分比 guest/total*100
- %gnice gnice/total*100
- %idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) idle/total*100
root@localhost ~ : pidstat --help
pidstat --help
Usage: pidstat [ options ] [ <interval> [ <count> ] ] [ -e <program> <args> ]
Options are:
[ -d ] [ -H ] [ -h ] [ -I ] [ -l ] [ -R ] [ -r ] [ -s ] [ -t ] [ -U [ <username> ] ]
[ -u ] [ -V ] [ -v ] [ -w ] [ -C <command> ] [ -G <process_name> ]
[ -p { <pid> [,...] | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ]
- -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:显示命令名和所有参数
指定采样周期和采样次数
pidstat命令指定采样周期和采样次数,命令形式为pidstat [option] interval [count]
,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息:
pidstat 2 10
使用-r选项,pidstat将显示各活动进程的内存使用统计:
root@localhost ~ : pidstat -r -p your pid
16:50:23 UID PID minflt/s majflt/s VSZ RSS %MEM Command
16:50:23 1000 15113 0.00 0.00 42148 38572 0.30 cfadmin
使用-d选项,我们可以查看进程IO的统计信息:
root@localhost ~ : pidstat -d -p your pid
16:53:44 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
16:53:44 1000 15113 0.00 0.05 0.00 7 cfadmin
-
minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
-
majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
-
VSZ: 该进程使用的虚拟内存(以kB为单位)
-
RSS: 该进程使用的物理内存(以kB为单位)
-
%MEM: 该进程使用内存的百分比
-
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)
-
kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)
-
Command: 拉起进程对应的命令
root@localhost ~ : vmstat --help
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition <dev> partition specific statistics
-S, --unit <char> define display unit
-w, --wide wide output
-t, --timestamp show timestamp
-h, --help display this help and exit
-V, --version output version information and exit
For more details see vmstat(8).
root@localhost ~ : vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 7686308 821860 3418368 0 0 0 0 0 0 0 0 100 0 0
有关进程的信息有:(procs)
- r: 在就绪状态等待的进程数。
- b: 在等待状态等待的进程数。
有关内存的信息有:(memory)
- swpd: 正在使用的swap大小,单位为KB。
- free: 空闲的内存空间。
- buff: 已使用的buff大小,对块设备的读写进行缓冲。
- cache: 已使用的cache大小,文件系统的cache。
有关页面交换空间的信息有:(swap)
- si: 交换内存使用,由磁盘调入内存。
- so: 交换内存使用,由内存调入磁盘。
有关IO块设备的信息有:(io)
- bi: 从块设备读入的数据总量(读磁盘) (KB/s)
- bo: 写入到块设备的数据总理(写磁盘) (KB/s)
有关故障的信息有:(system)
- in: 在指定时间内的每秒中断次数。
- sy: 在指定时间内每秒系统调用次数。
- cs: 在指定时间内每秒上下文切换的次数。
有关CPU的信息有:(cpu)
- us: 在指定时间间隔内CPU在用户态的利用率。
- sy: 在指定时间间隔内CPU在核心态的利用率。
- id: 在指定时间间隔内CPU空闲时间比。
- wa: 在指定时间间隔内CPU因为等待I/O而空闲的时间比。
vmstat 可以用来确定一个系统的工作是受限于CPU还是受限于内存:如果CPU的sy和us值相加的百分比接近100%,或者运行队列(r)中等待的进程数总是不等于0,且经常大于4,同时id也经常小于40,则该系统受限于CPU;如果bi、bo的值总是不等于0,则该系统受限于内存。
root@localhost ~ : cifsiostat --help
Usage: cifsiostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -h ] [ -k | -m ] [ -t ] [ -V ]