内存管理、每个进程的相关信息、文件系统、设备驱动程序、系统总线、电源管理、终端、系统
控制参数、网络。
主机上的各个进程都是以目录的形态存在于/proc当中,例如systemd进程
[root@localhost ~]# ll /proc/1
总用量 0
dr-xr-xr-x. 2 root root 0 6月 10 18:40 attr
-rw-r--r--. 1 root root 0 6月 10 18:40 autogroup
-r--------. 1 root root 0 6月 10 18:40 auxv
-r--r--r--. 1 root root 0 6月 10 18:23 cgroup
--w-------. 1 root root 0 6月 10 18:40 clear_refs
-r--r--r--. 1 root root 0 6月 10 18:23 cmdline
-rw-r--r--. 1 root root 0 6月 10 18:23 comm
-rw-r--r--. 1 root root 0 6月 10 18:40 coredump_filter
-r--r--r--. 1 root root 0 6月 10 18:40 cpuset
lrwxrwxrwx. 1 root root 0 6月 10 18:40 cwd -> /
-r--------. 1 root root 0 6月 10 18:23 environ
lrwxrwxrwx. 1 root root 0 6月 10 18:23 exe -> /usr/lib/systemd/systemd
...
cmdline:这个进程启动的命令。
[root@localhost 1]# cat cmdline
/usr/lib/systemd/systemd--switched-root--system--deserialize22
environ:这个进程的环境变量内容。
[root@localhost 1]# cat environ
和整个Linux系统相关的参数如下:
/proc/cmdline:加载kernel时的相关指令与参数。
/proc/cpuinfo:CPU相关信息,包含频率、类型与运算功能。
/proc/devices:记录了系统各个主要设备的主设备号码。
/proc/filesystems:记录系统加载的文件系统。
/proc/loadavg:平均负载值top看到就是这个。
/proc/meminfo:内存信息,free命令看到就是这个。
/proc/modules:系统已经加载的模块。
/proc/mounts:系统已经挂载的数据mount看到就是这个数据。
/proc/partitions:系统的分区文件。
/proc/version:系统的核心版本uname -a看到的内容。
uptime
能够打印系统总共运行了多长时间和系统的平均负载。uptime命令显示的信息依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
[root@localhost proc]# uptime
18:50:21 up 27 min, 3 users, load average: 0.00, 0.01, 0.08
系统平均负载是指在特定时间间隔内运行队列中的平均进程数。如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。如果你的linux主机是1个双核CPU的话,当Load Average为6的时候说明机器已经被充分使用了。
free
可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用
的内存缓冲区。
[root@localhost proc]# free -h
total used free shared buff/cache available
Mem: 1.9G 705M 682M 19M 592M 1.1G
Swap: 2.0G 0B 2.0G
vmstat
此命令是最常见的Linux/Unix监控工具,含义为显示虚拟内存状态(“Virtual
Memory Statistics”),但也可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率、内存使用、虚拟内存交换情况、IO读写情况。
[root@localhost proc]# vmstat
procs --------memory--------- ---swap- --io--- -system- ----cpu-------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 698556 2156 604812 0 0 280 17 77 245 1 1 97 0 0
参数解释
-V:显示vmstat版本信息
-n:只在开始时显示一次各字段名称
-a:显示活跃和非活跃内存
-d:显示各个磁盘相关统计信息
-D:显示磁盘总体信息
-p:显示指定磁盘分区统计信息
-s:显示内存相关统计信息及多种系统活动数量
-m:显示slabinfo
-t:在输出信息的时候也将时间一并输出出来
-S:使用指定单位显示。参数有k,K,m,M,分别代表1000;1024;1000000;1048576字节
(byte)。默认单位为K(1024bytes)
delay:刷新时间间隔。如果不指定,只显示一条结果
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷
vmstat各字段说明
1、procs
r:表示运行和等待CPU时间片的进程数(就是说多少个进程真的分配到CPU),这个值如果长期大
于系统CPU个数,说明CPU不足,需要增加CPU。
b:表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
2、memory
swpd:表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位KB),如果大于0,表示
你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的
任务迁移到其他机器。
free:表示当前空闲的物理内存
buff:表示buffers cached内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲
Cache:表示page cached的内存大小,也就是缓存大小,一般作为文件系统进行缓冲,频繁
访问的文件都会被缓存,如果cache值非常大说明缓存文件比较多,如果此时io中的bi比较小,
说明文件系统效率比较好
3、swap
si:表示从磁盘调入内存,也就是内存进入内存交换区的内存大小;通俗的讲就是 每秒从磁盘
读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存
进程解决掉。
so:表示由内存进入磁盘,也就是由内存交换区进入内存的内存大小。
注意:一般情况下si、so的值都为0,如果si、so的值长期不为0,则说明系统内存不足,需要
增加系统内存
4、io
bi:表示从块设备每秒读取的块数量
bo:表示每秒写到块设备的块数量
注意:如果bi+bo的值过大,且wa值较大,则表示系统磁盘IO瓶颈
5、system
in: 表示每秒的中断数,包括时钟
cs:表示每秒产生的上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的
切换,也要进程上下文切换,这个值要越小越好,太大的话,要考虑调低线程或者进程的数目,
例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并
发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个
比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们
的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。
上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU
没有充分利用,是不可取的。
注意:这两个值越大,则由内核消耗的CPU就越多。
6、CPU
us:表示用户进程消耗的CPU时间百分比,us值越高,说明用户进程消耗CPU时间越多,如果长
期大于50%,则需要考虑优化程序或者算法
sy:表示系统内核进程消耗的CPU时间百分比,一般来说us+sy应该小于80%,如果大于80%,
说明可能存在CPU瓶颈
id:表示CPU处在空间状态的时间百分比
wa:表示IP等待所占用的CPU时间百分比,wa值越高,说明I/O等待越严重,根据经验wa的参考
值为20%,如果超过20%,说明I/O等待严重,引起I/O等待的原因可能是磁盘大量随机读写造成
的,也可能是磁盘或者监控器的贷款瓶颈(主要是块操作)造成的
综上所述,如果评估CPU,需要重点关注procs项的r列值和CPU的us、sy、wa列的值。
使用示例
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。
[root@localhost proc]# vmstat -SM 2 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 618 2 621 0 0 163 12 62 169 1 1 98 0 0
0 0 0 618 2 621 0 0 0 0 46 76 0 1 100 0 0
是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。
要想使用这个命令还需要安装:sysstat
[root@localhost proc]# yum -y install sysstat
参数:
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值 internal 相邻的两次采样的间隔时间、count采样的次数,count只能和delay一起使用;当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。
[root@localhost proc]# mpstat
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
19时43分16秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时43分16秒 all 0.64 0.02 0.74 0.02 0.00 0.01 0.00 0.00 0.00 98.57
参数详解:
%user:在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
%idle:在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100
示例:每2秒查看一次,共查看5次。
[root@localhost proc]# mpstat 2 5
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
19时49分23秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时49分25秒 all 0.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.00
19时49分27秒 all 0.50 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.50
19时49分29秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时49分31秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时49分33秒 all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: all 0.20 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.40
查看每个CPU核心的详细当前运行状况信息,输出如下
[root@localhost proc]# mpstat -P ALL 2 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
19时51分12秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时51分14秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时51分14秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时51分14秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时51分16秒 all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
19时51分16秒 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
19时51分16秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时51分18秒 all 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
19时51分18秒 0 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均时间: all 0.17 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.67
平均时间: 0 0.17 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.67
iostat
用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。能查看到系统IO状态信息,从而确定IO性能是否存在瓶颈。
常用参数
-c:仅显示CPU使用情况;
-d:仅显示设备利用率;
-k:显示状态以千字节每秒为单位,而不使用块每秒;
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-t:显示每个报告产生时的时间;
-V:显示版号并退出;
-x:显示扩展状态。
[root@localhost proc]# iostat
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.58 0.02 0.68 0.01 0.00 98.70
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.10 113.35 8.47 621426 46452
scd0 0.01 0.19 0.00 1050 0
dm-0 2.83 111.14 8.10 609282 44404
dm-1 0.02 0.40 0.00 2204 0
详细参数说明
第一行是系统信息和监测时间,第二行和第三行显示CPU使用情况(具体内容和mpstat命令相同)
tps:该设备每秒的传输次数(Indicate the number of transfers per second that
were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能
会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量
-------------------------------------------
|标示 |说明
|Device |监测设备名称
-------------------------------------------
|rrqm/s |每秒需要读取需求的数量
-------------------------------------------
|wrqm/s |每秒需要写入需求的数量
-------------------------------------------
|r/s |每秒实际读取需求的数量
-------------------------------------------
|w/s |每秒实际写入需求的数量
-------------------------------------------
|rsec/s |每秒读取区段的数量
-------------------------------------------
|wsec/s |每秒写入区段的数量
-------------------------------------------
|rkB/s |每秒实际读取的大小,单位为KB
-------------------------------------------
|wkB/s |每秒实际写入的大小,单位为KB
-------------------------------------------
|avgrq-sz |需求的平均大小区段
-------------------------------------------
|avgqu-sz |需求的平均队列长度
-------------------------------------------
|await |等待I/O平均的时间(milliseconds)
--------------------------------------------
|svctm |I/O需求完成的平均时间
--------------------------------------------
|%util |被I/O需求消耗的CPU百分比
--------------------------------------------
sar
sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
常用命令格式及参数
命令格式:sar [options] [-A] [-o file] t [n]
t:采样间隔,n为采样次数,默认值是1;
-o file:表示将命令结果以二进制格式存放在文件中,file是文件名。
options为命令行选项。
sar命令常用选项如下:
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息
示例
1.CPU资源监控
每10秒采样一次,连续采样3次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中。
[root@localhost zhangjie]# sar -u -o test 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时16分25秒 CPU %user %nice %system %iowait %steal %idle
20时16分35秒 all 0.20 0.00 0.40 0.00 0.00 99.40
20时16分45秒 all 0.20 0.00 0.20 0.00 0.00 99.60
20时16分55秒 all 0.10 0.00 0.20 0.00 0.00 99.70
平均时间: all 0.17 0.00 0.27 0.00 0.00 99.57
输出项说明:
CPU:all表示统计信息为所有CPU的平均值。
%user:显示在用户级别(application)运行使用CPU总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%system:在核心级别(kernel)运行所使用CPU总时间的百分比。
%iowait:显示用于等待I/O操作占用CPU总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
%idle:显示CPU空闲时间占用CPU总时间的百分比。
总结
1.若%iowait的值过高,表示硬盘存在I/O瓶颈。
2.%idle的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。
3.%idle的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
如果要查看二进制文件test中的内容,则可以这样操作
[root@localhost zhangjie]# sar -u -f test
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时16分25秒 CPU %user %nice %system %iowait %steal %idle
20时16分35秒 all 0.20 0.00 0.40 0.00 0.00 99.40
20时16分45秒 all 0.20 0.00 0.20 0.00 0.00 99.60
20时16分55秒 all 0.10 0.00 0.20 0.00 0.00 99.70
平均时间: all 0.17 0.00 0.27 0.00 0.00 99.57
2、inode、文件和其他内核表监控
每10秒采样一次,连续采样3次,观察核心表的状态
[root@localhost zhangjie]# sar -v 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时23分31秒 dentunusd file-nr inode-nr pty-nr
20时23分41秒 50250 8896 58653 2
20时23分51秒 50250 8896 58653 2
20时24分01秒 50250 8896 58653 2
平均时间: 50250 8896 58653 2
输出项说明
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量
3、内存和交换空间监控
每10秒采样一次,连续采样3次,监控内存和交换空间
[root@localhost zhangjie]# sar -r 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时26分40秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
20时26分50秒 631964 1395976 68.84 2156 574848 4036112 97.84 692196 394132 0
20时27分00秒 631964 1395976 68.84 2156 574848 4036112 97.84 692200 394132 0
20时27分10秒 631964 1395976 68.84 2156 574848 4036112 97.84 692208 394132 0
平均时间: 631964 1395976 68.84 2156 574848 4036112 97.84 692201 394132 0
输出项说明
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
4、内存分页监控
每10秒采样一次,连续采样3次,监控内存分页
[root@localhost zhangjie]# sar -B 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时32分14秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
20时32分24秒 0.00 0.00 7.52 0.00 10.43 0.00 0.00 0.00 0.00
20时32分34秒 0.00 0.00 262.53 0.00 104.31 0.00 0.00 0.00 0.00
20时32分44秒 0.00 0.00 1.81 0.00 4.61 0.00 0.00 0.00 0.00
平均时间: 0.00 0.00 90.68 0.00 39.81 0.00 0.00 0.00 0.00
输出项说明
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、I/O和传送速率监控
每10秒采样一次,连续采样3次,报告缓冲区的使用情况
[root@localhost zhangjie]# sar -b 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时34分41秒 tps rtps wtps bread/s bwrtn/s
20时34分51秒 0.00 0.00 0.00 0.00 0.00
20时35分01秒 0.10 0.00 0.10 0.00 1.61
20时35分11秒 0.40 0.00 0.40 0.00 8.12
平均时间: 0.17 0.00 0.17 0.00 3.24
输出项说明
tps:每秒钟物理设备的I/O传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为块/s
6、进程队列长度和平均负载状态监控
每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态
[root@localhost zhangjie]# sar -q 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时37分57秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
20时38分07秒 1 485 0.00 0.01 0.05 0
20时38分17秒 1 485 0.00 0.01 0.05 0
20时38分27秒 1 485 0.00 0.01 0.05 0
平均时间: 1 485 0.00 0.01 0.05 0
输出项说明
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
7、系统交换活动信息监控
每10秒采样一次,连续采样3次,监控系统交换活动信息
[root@localhost zhangjie]# sar -W 10 3
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时40分55秒 pswpin/s pswpout/s
20时41分05秒 0.00 0.00
20时41分15秒 0.00 0.00
20时41分25秒 0.00 0.00
平均时间: 0.00 0.00
输出项说明
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
8、设备使用情况监控
每10秒采样一次,连续采样3次,报告设备使用情况
[root@localhost zhangjie]# sar -d 10 3 -p
Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 2020年06月10日 _x86_64_ (1 CPU)
20时43分23秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
20时43分33秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分33秒 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分33秒 centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分33秒 centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分33秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
20时43分43秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分43秒 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分43秒 centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分43秒 centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分43秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
20时43分53秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分53秒 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分53秒 centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时43分53秒 centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
平均时间: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明
参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是
dev8-0,dev22-0
tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传
输的大小是不确定的.
rd_sec/s:每秒读扇区的次数.
wr_sec/s:每秒写扇区的次数.
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
avgqu-sz:磁盘请求队列的平均长度.
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待
时间,单位是毫秒(1秒=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:I/O请求占CPU的百分比,比率越大,说明越饱和.
1.avgqu-sz的值较低时,设备的利用率较高。
2.当%util的值接近1%时,表示设备带宽已经占满。
总结
如果要判断系统瓶颈问题,有时需几个sar命令选项结合:
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
iotop
一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。
实时观察磁盘io情况,可以观察到哪个进程占用I/O
[root@localhost ~]# yum -y install iotop
参数
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。
-u USER:监控的进程用户。
iotop常用快捷键
1. 左右箭头:改变排序方式,默认是按IO排序。
2. r:改变排序顺序。
3. o:只显示有IO输出的进程。
4. p:进程/线程的显示方式的切换。
5. a:显示累积使用量。
6. q:退出。
直接执行即可
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
27896 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.02 % [kworker/0:1]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --s~serialize 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
3076 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [xfs-log/dm-0]
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
3078 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [xfsaild/dm-0]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched]
...