系统性能指标之 vmstat

系统性能指标

top

top - 19:59:04 up 219 days, 21:51, 2 users, load average: 0.06, 0.06, 0.05
Tasks: 84 total, 1 running, 83 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.5 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3881692 total, 105116 free, 3338860 used, 437716 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 296856 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9855 root 20 0 3967344 1.345g 6772 S 0.7 36.3 388:51.05 java
11223 root 20 0 3075500 461148 8136 S 0.7 11.9 2966:49 java
3172 root 20 0 236452 10524 1068 S 0.3 0.3 104:56.64 docker-containe
8588 root 20 0 0 0 0 S 0.3 0.0 2:18.06 kworker/1:1
11352 root 20 0 131564 10596 4516 S 0.3 0.3 62:17.97 AliYunDun
17578 root 20 0 3305304 354272 15904 S 0.3 9.1 18:40.22 java

全局信息
top - 19:59:04[当前系统时间],
days[系统已经运行了多长时间],
user[个用户当前登录],
load average: [系统负载]
Tasks: total[总进程数],
running[正在运行的进程数],
sleeping[睡眠的进程数],
stopped[停止的进程数],
zombie[冻结进程数],

CPU信息
Cpu(s):us [用户空间占用CPU百分比],
sy[内核空间占用CPU百分比],
ni[用户进程空间内改变过优先级的进程占用CPU百分比],
id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
st[如果是虚拟机运行的话,从其他虚拟机'偷走的'CPU占比],

内存信息
Mem: total[物理内存总量],
used[使用的物理内存总量],
free[空闲内存总量],
buffers[用作内核缓存的内存量]
Swap: total[交换区总量],
used[使用的交换区总量],
free[空闲交换区总量],
cached[缓冲的交换区总量],

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 974128 5147112 135412 1368628 0 1 5 31 3 4 5 2 93 0 0
7 1 974128 5147608 135424 1368616 0 0 0 48 12001 18118 39 15 46 0 0
2 0 974128 5147732 135436 1368636 0 0 0 80 11149 17957 45 14 41 0 0

procs
r这一列显示了多少进程正在等待CPU。
b显示多少进程正在不可中断的休眠(通常意味着他们在等待I/O,例如磁盘、网络、用户输入等待)。

memory
swpd列显示多少块被换出到了磁盘(页面交换)。
free列显示多少块是空闲的(未被使用)。
buff列显示多少块正在被用作缓冲。
cache列显示多少块正在被用作操作系统的缓存。

swap
si列显示每秒有多少块正在从磁盘被换入。
so列显示每秒有多少块正在换出道磁盘。
比swapd要重要。

io
bi:有多少块从块设备读取。
bo:有多少块从块设备写出。

system
in:每秒被中断的次数。
cs:上下文切换的次数,超过10万次的话需要注意。

cpu
us:执行用户代码(非内核)占用CPU的比例。
sy:执行系统代码(内核)占用CPU的比例,超过20的话需要注意。
id:空闲时间占用CPU的比例。
wt:等待时间占用CPU的比例。
st:从虚拟机偷走的CPU的比例。

iostat

iostat -dx 5
Linux 3.10.0-693.2.2.el7.x86_64 (iZm5e2cjbccf14pah8d9dgZ) 06/11/2018 x86_64 (2 CPU)

Device: 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 0.19 0.01 0.48 0.12 3.35 14.30 0.00 6.02 9.88 5.97 0.33 0.02

rrqm/s wrqm/s
每秒合并的读和写请求。"合并的"意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。

r/s 和 w/s
每秒发送到设备的读和写请求。

rKb/s 和 wKb/s
每秒读和写的千字节数。

avgrq-sz
请求的扇区数

avgqu-sz
在设备队列中等待的请求数。

await/r_await/w_await
磁盘读写/读/写排队上花费的毫秒数。

svctm
服务请求花费的毫秒数,不包括排队时间。

%util
磁盘I/O使用率。

计算设备服务的并发请求数:concurrency = (r/s + w/s) * (svctm/1000)

几个通用判断经验

1.vmstat 中cs-上下文的切换,当每秒不超过100 000次时,一般不需要担心。

2.系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。

3.如果在很长的一段时间里,运行队列的长度一直都超过虚拟机处理器个数的1倍,就需要关注,只是暂时还不一定需要立刻采取行动,如果在很长一段时间里,运行队列的长度达到虚拟机处理机个数的3-4倍,则需要立刻采取行动。

原文地址:https://www.cnblogs.com/yanfengfree/p/9158953.html