Linux运维*一.Linux基础---25、Linux系统性能查看工具汇总
一、glances:基于C/S架构的资源管理工具
glances介绍:
top 命令是 Linux 下的一个实时任务管理器, 同时也是用于在 GNU/Linux 发行版中寻找系统性能方面的瓶颈,并帮助我们作出正确操作的常用系统监视工具。 她有着一个极为简洁的界面,并自带少量的可以帮助我们快速了解系统性能的实用选项。但是,有些时候想要通过她寻找一个占用系统资源比较大的应用或进程可能会比较困难。 因为 top 命令本身并不会帮助我们高亮那些吃太多 CPU,内存,或者其他资源的程序。
Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。Glances 是一个用来监视 GNU/Linux 和 FreeBSD 操作系统的 GPL 授权的自由软件。Glances 同时也提供了很多实用的选项。 其中我们能够在配置文件见到的一项主要的功能就是设置关键值及相应的标签 (careful[小心], warning[警告] 和 critical[严重]), 然后她会自动帮我们用不同颜色标出系统达到某个瓶颈的信息。
Glances 主要功能
• CPU 信息 (用户的相关应用, 系统核心程序和空闲程序)
• 总内存信息,包括了物理内存,交换空间和空闲内存等等
• 之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载
• 网络链接的下行和上行速度
• 处理器总数,以及其活动状态
• 硬盘 I/O 相关(读写)速度详情
• 当前挂载设备的磁盘使用情况
• 高 CPU 和内存使用的进程名,和相关应用的位置
• 在底部显示当前日期和时间
• 将消耗最高系统资源的进程用红色标出
安装:yum install -y glances或者源码安装
命令格式:
glances 选项
glances 进入页面后按子命令实现相关功能
常用选项:
-b # 以Byte为单位来显示网卡统计数据
-d # 关闭磁盘I/O同统计数据的显示
-f /文件位置 # 将显示的统计数据存储在指定文件
-o {HTMI|CSV} # 指定显示输出格式
-n # 不显示网络统计数据
-m # 不显示mount加载的文件系统
-1 # 每个CPU统计数据单独显示
-t n # 指定glances刷新频,默认1s
(选项功能也能通过子命令实现)
常用子命令:
a # 自动排序 b # 以Byte为单位来显示网卡统计数据
c # 按CPU%排序 l # 显示/隐藏警报日志
m # 按MEM%排序 w # 删除报警
u # 按照用户排序 x # 删除警告和紧急警报
p # 按照进程名排序 1 # 全局CPU或每个CPU的统计信息
i # 按照IO速率排序 I # 显示/隐藏IP模块
t # 按照时间排序 D # 启用/禁用Docker统计数据
d # 显示/隐藏磁盘I/O状态 T # 以组合查看网络I/O
f # 显示/隐藏文件系统统计数据 U # 查看累计网络I/O
n # 显示/隐藏网络统计数据 F # 显示文件系统空闲空间
s # 显示/隐藏传感器数据 g # 生成当前历史记录的图形
2 # 显示/隐藏侧边栏 r # 重置历史
z # 启用/禁用流程数据 h # 显示/隐藏帮助屏幕
3 # 启用/禁用快速浏览插件 q # 退出 (Esc and Ctrl-C also work)
e # 启用/禁用顶部扩展状态
/ # 启用/禁用短进程名
0 # 启用/禁用Irix进程CPU
Glances 中高亮颜色的含义
Glances 会用一下几种颜色来代表状态:
- 绿色:OK(一切正常)
- 蓝色:CAREFUL(需要注意)
- 紫色:WARNING(警告)
- 红色:CRITICAL(严重)
高亮警告阀值可以在配置文件中设置:
一般阀值被默认设置为(careful=50、warning=70、critical=90)。
我们可以按照自己的需求在配置文件(默认在 /etc/glances/glances.conf)中自定义。
远程使用glances:
C/S命令格式:
服务端运行glances:
glances -s -B 本机IP -p port -P
-s # 运行为服务端glances
-B # 绑定服务地址
-p # 服务端端口
-P # 密码
客户端链接glances,查看服务端性能数据:
glances -c 服务端IP
C/S远程使用示例:
服务端运行glances:
[[email protected] ~]# glances -s -B 0.0.0.0 -p 80
Glances server is running on 0.0.0.0:80
客户端链接服务端查看:
[[email protected] ~]# glances -c 127.0.0.1 -p 80
二、sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
安装sar:yum install -y sysstat
命令格式:sar 选项 n m # n为刷新间隔,m为刷新次数
常用选项:
-A # 所有报告的总和
-a # 文件读写情况
-b # 显示I/O和传递速率的统计信息
-B # 显示换页状态
-d # 输出每一块磁盘的使用信息
-e # 设置显示报告的结束时间
-f # 从制定的文件读取报告
-i # 设置状态信息刷新的间隔时间
-P # 报告每个CPU的状态
-R # 显示内存状态
-u # 输出cpu使用情况和统计信息
-v # 显示索引节点、文件和其他内核表的状态
-w # 显示交换分区的状态
-x # 显示给定进程的装
-r # 报告内存利用率的统计信息
-c # 输出进程统计信息,每秒创建的进程数
使用示例:
(1、CPU资源监控
每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入cpu_info中,如果要查看二进制文件test中的内容,需键入如下sar命令:sar -u -f test
[[email protected] ~]# sar -u -o /root/cpu_info 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:11:26 PM CPU %user %nice %system %iowait %steal %idle
11:11:36 PM all 0.18 0.00 0.08 0.00 0.00 99.75
11:11:46 PM all 0.23 0.00 0.08 0.00 0.00 99.70
11:11:56 PM all 0.23 0.00 0.08 0.03 0.00 99.67
Average: all 0.21 0.00 0.08 0.01 0.00 99.71
输出项说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
输出数据分析:
若 %iowait 的值过高,表示硬盘存在I/O瓶颈
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。
(2、 inode、文件和其他内核表监控
每10秒采样一次,连续采样3次,观察核心表的状态
[[email protected] ~]# sar -v 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:17:21 PM dentunusd file-nr inode-nr pty-nr
11:17:31 PM 34449 1664 39389 3
11:17:41 PM 34449 1664 39389 3
11:17:51 PM 34449 1664 39389 3
Average: 34449 1664 39389 3
输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量
(3、内存和交换空间监控
每5秒采样一次,连续采样3次,监控内存分页:
[[email protected] ~]# sar -r 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:19:17 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
11:19:22 PM 1086732 778576 41.74 2116 473184 315136 7.95 388136 194260 0
11:19:27 PM 1086732 778576 41.74 2116 473184 315136 7.95 388136 194260 0
11:19:32 PM 1086732 778576 41.74 2116 473184 315136 7.95 388156 194260 0
Average: 1086732 778576 41.74 2116 473184 315136 7.95 388143 194260 0
输出项说明:
kbmemfree:空闲内存 ,不包括buffer和cache的空间.
kbmemused:已用内存,包括buffer和cache的空间.
%memused:kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:buffer和cache.
kbcommit:为了确保当前系统不溢出而需要的内存(RAM+swap).
%commit:kbcommit与内存总量(包括swap)的一个百分比.
(4. 内存分页监控
每5秒采样一次,连续采样3次,监控内存分页:
[[email protected] ~]# sar -B 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:23:39 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
11:23:49 PM 0.00 0.10 4.20 0.00 7.59 0.00 0.00 0.00 0.00
11:23:59 PM 0.00 0.00 3.30 0.00 4.10 0.00 0.00 0.00 0.00
11:24:09 PM 0.00 0.00 2.50 0.00 4.80 0.00 0.00 0.00 0.00
Average: 0.00 0.03 3.33 0.00 5.50 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和传送速率监控
每3秒采样一次,连续采样3次,报告缓冲区的使用情况,需键入如下命令:
[[email protected] ~]# sar -b 3 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:25:14 PM tps rtps wtps bread/s bwrtn/s
11:25:17 PM 0.00 0.00 0.00 0.00 0.00
11:25:20 PM 0.00 0.00 0.00 0.00 0.00
11:25:23 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00
输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
(6. 进程队列长度和平均负载状态监控
每5秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:
[[email protected] ~]# sar -q 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:26:12 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
11:26:17 PM 0 153 0.00 0.01 0.05 0
11:26:22 PM 0 153 0.00 0.01 0.05 0
11:26:27 PM 2 153 0.00 0.01 0.05 0
Average: 1 153 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. 系统交换活动信息监控
[[email protected] ~]# sar -W 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:26:56 PM pswpin/s pswpout/s
11:27:01 PM 0.00 0.00
11:27:06 PM 0.00 0.00
11:27:11 PM 0.00 0.00
Average: 0.00 0.00
输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
(8. 设备使用情况监控
每5秒采样一次,连续采样3次,报告设备使用情况:
[[email protected] ~]# sar -d 5 3 -p
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:28:19 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:24 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:29 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:34 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 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的次数.
rd_sec/s:每秒读扇区的次数.
wr_sec/s:每秒写扇区的次数.
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
avgqu-sz:磁盘请求队列的平均长度.
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间
包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:I/O请求占CPU的百分比,比率越大,说明越饱和.
分析:
avgqu-sz 的值较低时,设备的利用率较高。
当%util的值接近 1% 时,表示设备带宽已经占满。
(9、要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
三、vmstat:swap交互内存查看工具
vmstat n m # 查看内存运行情况(n:刷新间隔时间;m:刷新次数)
vmstat 选项:
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。
示例:
[[email protected] ~]# vmstat 2 5
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 3100208 2600 594752 0 0 1 2 7 10 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 33 45 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 18 20 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 22 26 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 18 20 0 0 100 0 0
显示参数说明:
Procs(进程)
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
b: 等待IO的进程数量。
Memory(内存)
swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
free: 空闲物理内存大小。
buff: 用作缓冲的内存大小。
cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap
si: 每秒从交换区写到内存的大小,由磁盘调入内存。
so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
bi: 每秒读取的块数
bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,
但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多
这并不是良性表现,我们应该检查原因。
wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重
这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
id: 空闲时间百分比
四、dstat
dstat介绍:
dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入dstat 3即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如dstat -c即显示CPU的使用情况。
dstat非常强大,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。
直接使用dstat,默认使用的是-cdngy参数,分别显示cpu、disk、net、page、system信息,默认是1s显示一条信息。可以在最后指定显示一条信息的时间间隔,如dstat 5是没5s显示一条,dstat 5 10表示没5s显示一条,一共显示10条。
安装:
yum install -y dstat
格式:dstat 选项 刷新时间
常用选项:
-c # 单独显示CPU相关信息
-C total,cpu编号 # 分列显示所有CPU及指CPU相关信息
-d # 单独显示磁盘读写速率
-D total,磁盘编号 # 分列显示所有磁盘相关信息及地址磁盘信息
-n # 单独显示网络收发速率
-N total,网卡编号 # 分列显示所有网及指定网卡的相关信息
-g # 显示page相关数据
-i # 显示中断的统计数据
-l #显示单位时间内的负载情况
-m # 显示内存统计信息 (used、buffer、cache、free)
-p #显示进程统计信息
-r #显示I/O统计数据
-s # 显示交换空间统计数据
--tcp #显示tcp统计信息
--udp # 显示udp统计信息
-t # 显示当前时间输出
--aio # 显示异步I/O统计数据
--fs # 显示文件系统统计数据
--ipc # 显示ipc进程间通信统计数据
--lock # 显示文件锁信息
--socket # 显示socket统计数据
--top-{cpu|int|io|mem|lantency|...} 显示最占用cpu、中断、I/O内存、延迟最大的进程
示例:
[[email protected] tsar-master]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0|6335B 8621B| 0 0 | 0 0 | 73 57
0 0 100 0 0 0| 0 0 | 60B 890B| 0 0 | 84 69
0 0 100 0 0 0| 0 0 | 60B 362B| 0 0 | 80 64
1 0 99 0 0 0| 0 0 | 60B 362B| 0 0 | 108 71
0 0 100 0 0 0| 0 0 | 166B 422B| 0 0 | 75 63
0 0 100 0 0 0| 0 0 | 60B 362B| 0 0 | 75 61
输出说明:
hiq # cpu硬中断次数
siq # cpu软中断次数。
int # 系统中断次数
csw # 上下文切换次数、
五、iostat
Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析
安装:yum install -y sysstat
命令格式:iostat 选项 m n # m刷新数据、n刷新次数
常用选项:
- -C # 显示CPU使用情况
- -d # 显示磁盘使用情况
- -k # 以 KB 为单位显示
- -m # 以 M 为单位显示
- -N # 显示磁盘阵列(LVM) 信息
- -n # 显示NFS 使用情况
- -p 指定磁盘 # 显示磁盘和分区的情况
- -t # 显示终端和CPU的信息
- -x # 显示详细信息
- -V # 显示版本信息
示例1:
[[email protected] tsar-master]# iostat -dxm 1 2
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.09 0.19 0.29 0.01 0.01 60.86 0.00 8.06 1.28 12.46 1.51 0.07
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 8.33 8.33 0.00 6.11 0.00
dm-0 0.00 0.00 0.14 0.38 0.01 0.01 52.79 0.01 14.07 1.54 18.67 1.34 0.07
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 47.40 0.00 1.48 1.48 0.00 0.79 0.00
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 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
scd0 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
dm-0 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
dm-1 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
输出说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
示例2:
[[email protected] tsar-master]# iostat -cxm 1 2
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.00 0.12 0.02 0.00 99.75
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.09 0.19 0.29 0.01 0.01 60.83 0.00 8.07 1.28 12.48 1.51 0.07
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 8.33 8.33 0.00 6.11 0.00
dm-0 0.00 0.00 0.14 0.38 0.01 0.01 52.76 0.01 14.08 1.54 18.67 1.34 0.07
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 47.40 0.00 1.48 1.48 0.00 0.79 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.25 0.00 0.00 99.75
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 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
scd0 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
dm-0 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
dm-1 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
输出说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
分析:
如果 %util 接近 100%,说明的I/O请求太多,I/O已经满负荷,该磁盘可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait。
可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。
await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小。如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是讲,读定速度是这个来决定的。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
六、iftop:网卡的实时流量监控(可以指定网段)、反向解析IP、显示端口信息等
安装:yum install iftop -y
格式:iftop 选项 # 可以使用选项或者子命令实现指定功能
常用选项:
-i # 设定监测的网卡,如:# iftop -i eth1
-B # 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n # 使host信息默认直接都显示IP,如:# iftop -n
-N # 使端口信息默认直接都显示端口号,如: # iftop -N
-F #显示特定网段的进出流量
如iftop -F 172.30.1.0/24或# iftop -F 172.30.1.0/255.255.255.0
-h # 帮助,显示参数信息
-p # 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b # 使流量图形条默认就显示;
-f # 这个暂时还不太会用,过滤计算包用的;
-P # 使host信息及端口信息默认就都显示;
-m # 设置界面最上边的刻度的最大值,刻度分五个大段显示,
例:# iftop -m 100M
常用子命令:
h # 切换是否显示帮助;
n # 切换显示本机的IP或主机名;
s # 切换是否显示本机的host信息;
d # 切换是否显示远端目标主机的host信息;
t # 切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
N # 切换显示端口号或端口服务名称;
S # 切换是否显示本机的端口信息;
D # 切换是否显示远端目标主机的端口信息;
p # 切换是否显示端口信息;
P # 切换暂停/继续显示;
b # 切换是否显示平均流量图形条;
B #切换计算2秒或10秒或40秒内的平均流量;
T # 切换是否显示每个连接的总流量;
l # 打开屏幕过滤功能,输入要过滤的字符
比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
L # 切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
j或按k # 可以向上或向下滚动屏幕显示的连接记录;
1或2或3 # 可以根据右侧显示的三列流量数据进行排序;
< # 根据左边的本机名或IP排序;
> # 根据远端目标主机的主机名或IP排序;
o # 切换是否固定只显示当前的连接;
f # 可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
! # 可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
q # 退出监控。
示例:
[[email protected] tsar-master]# iftop -i ens33
输出字段说明:
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
七、mpstat:CPU监控工具
mpstat是 Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
命令格式:
mpstat -P cpu|ALL n m
# n:采样周期 m:采样次数 -P指定查看单个CPU还是说有CPU
示例:
[[email protected] ~]# mpstat 2 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
09:31:32 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:34 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:31:36 AM all 0.00 0.00 0.13 0.13 0.00 0.00 0.00 0.00 0.00 99.75
09:31:38 AM all 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.87
Average: all 0.04 0.00 0.04 0.04 0.00 0.00 0.00 0.00 0.00 99.87
输出字段含义:
CPU工作时间:
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
八、sysdig:多监控维度的整合工具,支持docker监控(docker自带,将在docker部分介绍)