Linux性能优化(三)——sysstat性能监控工具

一、sysstat简介

1、sysstat简介

sysstat提供了Linux性能监控工具集,包括sar、sadf、mpstat、iostat、pidstat等,用于监控Linux系统性能和使用情况。

iostat – 提供CPU统计,存储I/O统计(磁盘设备,分区及网络文件系统)

mpstat – 提供单个或组合CPU相关统计

pidstat – 提供Linux进程级别统计:I/O、CPU、内存等

sar – 收集、报告、保存系统活动信息:CPU、内存、磁盘、中断、网络接口、TTY、内核表等

sadc – 系统活动数据收集器,作为sar后端使用

sa1 – 收集系统活动日常数据,并二进制格式存储,它作为sadc的工具的前端,可以通过cron来调用

sa2 – 生成系统每日活动报告,同样可作为sadc的工具的前端,可以通过cron来调用

sadf – 可以以CSV、XML格式等显示sar收集的性能数据,这样非常方便的将系统数据导入到数据库中,或导入到Excel中来生成图表

nfsiostat-sysstat: 提供NFS I/O统计

cifsiostat: 提供CIFS统计

pidstat输出结果的%wait指标,代表进程等待CPU的时间百分比,systat 11.5.5版本才引入新指标。

2、sysstat安装

sysstat可以通过yum安装

yum install sysstat

下载源码sysstat-11.6.6.tar.xz安装:

SYSSTAT

编译选项配置:

configure

编译:

make

安装:

sudo make install

二、mpstat

1、mpstat简介

mpstat是一个常用的多核CPU性能分析工具,用来实时查看每个CPU的性能指标以及所有CPU的平均指标,数据文件/proc/stat。

mpstat是Multiprocessor Statistics缩写,是实时系统监控工具。

2、mpstat命令

mpstat [-P {cpu|ALL}] [internal [count]]

-P {cpu l ALL}:表示监控的CPU, cpu在[0,cpu个数-1]中取值

internal:相邻的两次采样的间隔时间

count:采样的次数,count只能和delay一起使用

3、mpstat指标展示

CPU:处理器ID   

%usr:在internal时间段里,用户态CPU时间,不包含nice值为负的进程

%nice:在internal时间段里,nice值为负进程的CPU时间。

%sys:在internal时间段里,内核太的CPU时间。

%iowait:internal时间段里,硬盘IO等待时间。

%irq:在internal时间段里,硬中断时间。

%soft:在internal时间段里,软中断时间。

%steal:显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比。

%guest:显示运行虚拟处理器时CPU花费时间的百分比。

%idle:在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间。

三、sar

1、sar简介

sar(System Activity Reporter,系统活动情况报告)是Linux最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘IO、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

2、sar命令

sar [options] [-A] [-o file] t [n]

-A:所有报告的总和

-u:输出CPU使用情况的统计信息

-v:输出inode、文件和其他内核表的统计信息

-d:输出每一个块设备的活动信息

-r:输出内存和交换空间的统计信息

-b:显示IO和传送速率的统计信息

-a:文件读写情况

-c:输出进程统计信息,每秒创建的进程数

-R:输出内存页面的统计信息

-y:终端设备活动情况

-w:输出系统交换活动信息

3、sar常用命令

(1)CPU资源监控

CPU:all表示统计信息为所有CPU的平均值。

%user:显示在用户级别(application)运行使用CPU总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用CPU总时间的百分比。

%system:在内核态运行所使用CPU总时间的百分比。

%iowait:显示用于等待IO操作占用CPU总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。

%idle:显示CPU空闲时间占用CPU总时间的百分比。

sar -u -f test

查看二进制文件test内容

(2)文件监控

每10秒采样一次,连续采样3次,观察核心表的状态

sar -v 10 3

dentunusd:目录高速缓存中未被使用的条目数量

file-nr:文件句柄(file handle)的使用数量

inode-nr:索引节点句柄(inode handle)的使用数量

pty-nr:使用pty数量

(3)内存和交换空间监控

sar -r 10 3

每10秒采样一次,连续采样3次,监控内存分页

kbmemfree:可用内存大小,不包括buffer和cache的空间。

kbmemused:已用内存大小,包括buffer和cache的空间.

%memused:kbmemused和内存总量(不包括swap)的一个百分比。

kbbuffers:

kbcached:

kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。

%commit:kbcommit与内存总量(包括swap)的一个百分比。

(4)内存分页监控

sar -B 10 3

每10秒采样一次,连续采样3次,监控内存分页

pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)

pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)

fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)

majflt/s:每秒钟产生的主缺页数.

pgfree/s:每秒被放入空闲队列中的页个数

pgscank/s:每秒被kswapd扫描的页个数

pgscand/s:每秒直接被扫描的页个数

pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数

%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

(5)IO监控

sar -b 10 3

每10秒采样一次,连续采样3次,报告缓冲区的使用情况

tps:每秒钟物理设备的 I/O 传输总量

rtps:每秒钟从物理设备读入的数据总量

wtps:每秒钟向物理设备写入的数据总量

bread/s:每秒钟从物理设备读入的数据量,单位为 块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

(6)进程队列和平均负载监控

sar -q 10 3

每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(System load average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

(7)系统交换信息监控

sar -w 10 3

每10秒采样一次,连续采样3次,监控系统交换活动信息

(8)设备使用情况监控

sar -d -p 10 3

每10秒采样一次,连续采样3次,报告设备使用情况

DEV:设备名称

tps:每秒从物理磁盘I/O的次数。多个逻辑请求会被合并为一个IO磁盘请求,一次传输的大小是不确定的。

rd_sec/s:每秒读扇区的次数。

wr_sec/s:每秒写扇区的次数。

avgrq-sz:平均每次设备IO操作的数据大小(扇区)。

avgqu-sz:磁盘请求队列的平均长度。

await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒。

svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间。

%util:IO请求占CPU的百分比,比率越大说明越饱和。

(9)网卡监控

sar –n DEV 1 4

-n参数选项:DEV | EDEV | NFS | NFSD | SOCK | ALL 。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套 接字信息,ALL显示所有。

IFACE:LAN接口
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包

四、pidstat

1、pidstat简介

pidstat是sysstat的一个命令,用于监控全部或指定进程的CPU、内存、线程、设备IO等系统资源的占用情况。Pidstat第一次采样显示自系统启动开始的各项统计信息,后续采样将显示自上次运行命令后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

2、pidstat命令

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

-u:默认参数,显示各进程的CPU使用统计

-r:显示各进程的内存使用统计

-d:显示各进程的IO使用情况

-p:指定进程号

-w:显示每个进程的上下文切换情况

-t:显示选择任务的线程的统计信息外的额外信息

-T { TASK | CHILD | ALL }:指定pidstat监控的内容。TASK表示报告独立的task,CHILD表示报告进程下所有线程统计信息,ALL表示报告独立的task和task下的所有线程。
-V:版本号

-h:在一行上显示所有活动。

-I:在SMP环境,表示任务的CPU使用率/内核数量

-l:显示命令名和所有参数

3、pidstat常用命令

(1)查看所有进程的CPU使用情况

pidstatpidstat -u -p ALL

PID:进程ID

%usr:进程在用户空间占用CPU的百分比

%system:进程在内核空间占用CPU的百分比

%guest:进程在虚拟机占用CPU的百分比

%CPU:进程占用CPU的百分比

CPU:运行进程的CPU

Command:当前进程对应的命令

(2)查看所有进程的CPU使用情况

pidstat -r

PID:进程标识符

minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页

majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页

VSZ:虚拟地址大小,虚拟内存的使用KB

RSS:常驻集合大小,非交换区五里内存使用KB

Command:task命令名

(3)查看所有进程的IO使用情况

pidstat -d

PID:进程id

kB_rd/s:每秒从磁盘读取的KB

kB_wr/s:每秒写入磁盘KB

kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。

COMMAND:task的命令名

(4)查看所有进程的上下文切换情况

pidstat -w

PID:进程id

Cswch/s:每秒主动任务上下文切换数量

Nvcswch/s:每秒被动任务上下文切换数量

Command:命令名

(5)查看进程的线程统计信息

pidstat -t

TGID:主线程的标识

TID:线程id

%usr:进程在用户空间占用CPU的百分比

%system:进程在内核空间占用CPU的百分比

%guest:进程在虚拟机占用CPU的百分比

%CPU:进程占用CPU的百分比

CPU:运行进程的CPU

Command:当前进程对应的命令

pidstat -T ALL -p 13671

PID:进程id

msr-ms:任务和子线程在用户级别使用的毫秒数。

system-ms:任务和子线程在系统级别使用的毫秒数。

guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。

Command:命令名

五、iostat

1、iostat简介

iostat是IO statistics(输入/输出统计)缩写,系统级别的IO监控,用于对系统磁盘操作活动进行监视,特点是汇报磁盘活动统计情以及CPU使用情况,缺点是不能对某个进程进行深入分析,只能对系统整体情况进行分析。

2、iostat命令

iostat [ options ] [ <interval> [ <count> ] ]

-c:仅显示显示CPU使用情况;

-d:仅显示显示设备利用率;

-k:显示状态以千字节每秒为单位,而不使用块每秒;

-m:显示状态以兆字节每秒为单位;

-p:显示块设备和所有被使用的其他分区的状态;

-t:显示每个报告产生时的时间;

-V:显示版号并退出;

-x:显示扩展状态。

3、iostat指标展示

%user:CPU处在用户模式下的时间百分比。

%nice:CPU处在带NICE值的用户模式下的时间百分比。

%system:CPU处在系统模式下的时间百分比。

%iowait:CPU等待输入输出完成时间的百分比。

%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

%idle:CPU空闲时间百分比。

tps:设备每秒的传输次数。

kB_read/s:每秒从设备(drive expressed)读取的数据量;

kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

kB_wrtn:写入的总数量数据量;

iostat -d -x -k 1 2

每隔1秒输出磁盘IO的详细情况,总共采样2次。

rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并

wrqm/s: 每秒对该设备的写请求被合并次数

r/s: 每秒完成的读次数

w/s: 每秒完成的写次数

rkB/s: 每秒读数据量(kB为单位)

wkB/s: 每秒写数据量(kB为单位)

avgrq-sz:平均每次IO操作的数据量(扇区数为单位)

avgqu-sz: 平均等待处理的IO请求队列长度

await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)

svctm: 平均每次IO请求的处理时间(毫秒为单位)

%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

六、vmstat

1、vmstat简介

vmstat(Virtual Meomory Statistics)是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。

2、vmstat命令

vmstat [options] [delay [count]]

-a:显示活跃和非活跃内存

-f:显示从系统启动至今的fork数量。
-m:显示slabinfo

-n:只在开始时显示一次各字段名称。

-s:显示内存相关统计信息及多种系统活动数量。

delay:刷新时间间隔。如果不指定,只显示一条结果。

count:刷新次数。如果不指定刷新次数,但指定刷新间隔,会一直刷新。

-d:显示磁盘相关统计信息。

-p:显示指定磁盘分区统计信息。

-S:指定单位显示,k、K、m、M分别代表1000、1024、1000000、1048576字节,默认单位为K。

-V:显示vmstat版本信息。

vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
vmstat [options] [delay [count]]

delay:数据采样间隔。如果不指定,返回开启启动以来的均值。

count:刷新数据次数。如果指定delay,但不指定connt,默认一直刷新。
vmstat interval times

每隔interval秒采样一次,共采样times次。

3、vmstat常用命令

procs:r列显示等待CPU的进程数量,b列显示正在不可中断休眠(等待IO)的进程数量。

memory:swapd列显示被换出磁盘(页面交换)的块的数量,free列显示空闲的(未被使用)块的数量,buff显示正在被用作缓冲区的数量,cache列显示正在被用作操作系统的缓存的数量。

swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。

io:显示多少块从块设备读取(bi)和写出(bo),通常反映了硬盘IO。

system显示每秒中断(in)和上下文切换(cs)的数量。

cpu显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平