概述
-
CPU :关注使用率、运行队列和上下文切换
排查方法 uptime -----> vmstat
-
内存:可用内存,swap占用,页面交换(Paging)
排查方法 vmstat
-
磁盘IO:%util ,IOPS,数据吞吐量
排查方法 : iostat ----> iotop
涉及linux 命令
- vmstat /uptime 一般系统自带
- iostat # 安装 yum install sysstat
- fio # 安装 yum install libaio-devel fio
CPU:
一般判断cpu 是不是存在性能瓶颈,可以通过
- uptime 查看性能负载(load average),如果系统持续处于高负载,(15分钟平均负载 > 2 *CPU总核数)
- 通过 vmstat的r值和b值来确认是CPU负荷重还是等待I/O的进程太多
- ps : vmstat r 值需要结合id(空闲CPU)来看,所以如果你的id值不小于40的话CPU是不存在瓶颈的
- CPU使用率 = us + sy , 一般在80%以下
如果sy 一直 > 25% ,关注in(中断)和cs(上下文切换)的数值
[root@VM_0_12_centos ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 68156 27976 508292 0 0 8 31 3 1 1 0 99 0 0
us:用户占用CPU的百分比
sy:系统(内核和中断)占用CPU的百分比
id:CPU空闲的百分比Procs
r: 运行进程的数量 (正在运行和等待运行)
b: 等待IO的进程数量 The number of processes in uninterruptible sleep.Memory
swpd: 使用的虚拟内存量
free: 可用内存大小.
buff: 用作缓冲区的内存量(buffers)
cache: 用作缓存的内存量 (cache).
inact: 不活动内存量. (-a option)
active: 活动的内存量. (-a option)Swap
si: 磁盘到内存 Amount of memory swapped in from disk (/s).
so: 内存到磁盘 Amount of memory swapped to disk (/s).IO
bi: 从块设备接收的块 Blocks received from a block device (blocks/s).
bo: 从块发送到块设备 Blocks sent to a block device (blocks/s).System
in: 每秒的中断数,包括时钟.
cs: 每秒的上下文的切换数CPU
百分比显示
us: 用户时间. (user time, including nice time)
sy: 系统(内核)时间. (system time)
id: cpu空闲时间百分比(包括了IO等待时间). Prior to Linux 2.5.41, this includes IO-wait time.
wa: 花费在io等待的时间. Prior to Linux 2.5.41, included in idle.
st: 从虚拟机窃取的时间. Prior to Linux 2.6.11, unknown.
cache(缓存) 和 buffer(缓冲) 简单概述:
cache : 主要用于弥补 高速设备和低速设备之间速度不匹配问题,最终起到加快访问速度的作用
buffer : 进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,减少响应次数
Cache一般用于读取数据,Buffer一般用于写入数据
内存(可用内存,swap占用,页面交换(Paging)):
- 内存占用应该小于物理内存的80%
- 页面交换:si/so 值判断
- swap占用 :swpd来获取当前SWAP空间的使用情况
- 当swpd不为0,但si,so持续保持为0时,内存资源并没有成为系统的瓶颈
磁盘IO
- 随机IO:随机读写数据,读写请求多,每次读写的数据量较小,其IO速度更依赖于磁盘每秒能IO次数(IOPS)。
- 顺序IO:顺序请求大量数据,读写请求个数相对较少,每次读写的数据量较大,顺序IO更重视每次IO的数据吞吐
IOPS:每秒处理读/写请求的数量,即iostat输出中的r/s和w/s,个人PC的机械硬盘IOPS一般在100左右
数据吞吐量:每秒读/写的数据大小,即iostat输出中的rkB/s和wkB/s,通常磁盘的数据吞吐量与IO类型有直接关系,顺序IO的吞吐能力明显优与随机读写,可以预先测得磁盘在随机IO和顺序IO下的吞吐量
iostat -x
Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_12_centos) 10/28/2019 _x86_64_ (1 CPU)avg-cpu: %user %nice %system %iowait %steal %idle
0.60 0.00 0.48 0.22 0.00 98.69Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 2.92 0.62 4.25 7.99 30.74 15.90 0.06 12.07 4.34 13.20 0.65 0.32
scd0 0.00 0.00 0.00 0.00 0.00 0.00 64.78 0.00 0.45 0.45 0.00 0.33 0.00
svctm:平均每次设备I/O操作的服务时间 (毫秒)【警告! 不再信任此字段。 将来的sysstat版本中将删除此字段。】
util:一秒中I/O 操作的利用率,或者说一秒中有多少时间 I/O 队列是非空的。
>60% 很可能降低系统性能表现
IO测试工具:
fio 命令是专门测试 iops 的命令
如果发现IO 瓶颈 可以进一步通过iotop: 查看IO 负载具体是哪个进程