操作系统性能诊断

操作系统性能诊断
操作系统内存性能诊断
Linux 内核给每一个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,也就是虚拟内存。本文介绍常见内存性能分析命令,以及内存性能分析方法。
Linux 内存性能分析常用命令
• top
top 命令经常用来监控 Linux 的系统状况,比如 CPU、内存的使用情况,如下图所示:

图中第四行显示为系统内存状态
total: 物理内存总量
used: 使用中的内存总量
free: 空闲内存总量
buffers: 缓存的内存量

图中第五行显示 swap 交换分区
total: 交换区总量
used: 使用的交换区总量
free: 空闲交换区总量
cached: 缓冲的交换区总量
• vmstat
vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,如下图所示:

memory 部分
swpd:切换到内存交换区的内存大小;
free:当前空闲的物理内存;
buff:baffers cached 内存大小;
swap:
si:内存进入内存交换区的内存大小;
so:由内存进入磁盘,也就是由内存交换区进入内存的内存大小;
Linux 内存性能诊断
这里我们使用 vmstat 来进行分析,如下所示:
[root@dm8 ~]# vmstat 1 10
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2273472 32968 701004 0 0 458 128 165 154 0 2 98 0 0
0 0 0 2273748 32968 701004 0 0 0 36 248 253 0 1 99 0 0
0 0 0 2273812 32976 701004 0 0 0 128 673 530 0 2 98 0 0
1 0 0 2274360 32976 701020 0 0 0 4 594 439 0 2 98 0 0
0 0 0 2274728 32976 701024 0 0 0 12 279 256 0 1 99 0 0
0 0 0 2274684 32976 701024 0 0 0 4 106 191 0 0 100 0 0
0 0 0 2274684 32976 701024 0 0 0 8 156 203 0 1 100 0 0
0 0 0 2273832 32984 701016 0 0 0 80 649 531 1 2 98 0 0
0 0 0 2274052 32984 701056 0 0 0 8 491 431 0 1 98 0 0
0 0 0 2274336 32984 701060 0 0 0 4 107 192 0 0 100 0 0
• MEMORY
o swap:切换到交换内存上的内存(默认以 KB 为单位)。如果 SWAP 的值不为 0,或者还比较大,比如超过 100 MB 了,但是 SI 和 SO 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
o free:空闲的物理内存。
o buff:作为 buffer cache 的内存,对块设备的读写进行缓冲。
o cache:作为 page cache 的内存,文件系统的 cache 如果 cache 的值大的时候,说明 cache 处的文件数多,如果频繁访问到的文件都能被 cache,那么磁盘的读 IO bi 会非常小。
• SWAP
o si:交换内存使用,由磁盘调入内存。
o so:交换内存使用,由内存调入磁盘。
注意
内存够用的时候,这 2 个值都是 0,如果这 2 个值长期大于 0 时,系统性能会受到影响,磁盘 IO 和 CPU 资源都会被消耗。
空闲内存 (FREE) 很少的或接近于 0 时,并不能认定为内存不够用,Linux 是抢占内存的 OS,还要结合 si 和 so;如果 free 很少,si 和 so 也很少(大多时候是 0),那么不用担心,系统性能这时不会受到影响的。

操作系统 CPU 性能诊断
CPU 是计算机系统的大脑,这个重要性不可置否。在性能优化的过程中,CPU 的性能指标是很重要的。本文介绍 CPU 性能分析命令,以及 CPU 性能分析方法。
CPU 性能分析命令
• top
top 命令经常用来监控 Linux 的系统状况,比如 CPU、内存的使用,如下图所示:

第三行 CPU 信息统计数据如下所示:
Cpu(s):  
  0.0% us:  用户空间占用 CPU 百分比。
  0.3% sy:  内核(系统)空间占用 CPU 百分比。
  0.0% ni:  用户进程空间内改变过优先级的进程占用 CPU 百分比。
  99.7% id: 空闲 CPU 百分比。
  0.0% wa: 等待输入输出的 CPU 时间百分比。
  0.0%hi:  硬件 CPU 中断占用百分比。
  0.0%si:  软中断占用百分比。
  0.0%st:  虚拟机(虚拟化技术)占用百分比。
• vmstat
vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,如下图所示:

CPU 以百分比显示如下所示:
us(user time):用户进程执行时间。
sy(system time):系统进程执行时间。
id:空闲时间(包括 IO 等待时间)。
wa:等待 IO 时间,wa 的值高时,说明 IO 等待比较严重,这可能由于磁盘大量做随机访问造成的,也有可能是磁盘出现瓶颈。
st:表示被偷走的 CPU 所占百分比(一般都为 0,不用关注)。
us + sy + id + wa =100% 近似为 100%
CPU 性能诊断
使用 vmstat 查看系统的 CPU 整体运行状况,如下所示:
[root@dm8 ~]# vmstat 1 10
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2273472 32968 701004 0 0 458 128 165 154 0 2 98 0 0
0 0 0 2273748 32968 701004 0 0 0 36 248 253 0 1 99 0 0
0 0 0 2273812 32976 701004 0 0 0 128 673 530 0 2 98 0 0
1 0 0 2274360 32976 701020 0 0 0 4 594 439 0 2 98 0 0
0 0 0 2274728 32976 701024 0 0 0 12 279 256 0 1 99 0 0
0 0 0 2274684 32976 701024 0 0 0 4 106 191 0 0 100 0 0
0 0 0 2274684 32976 701024 0 0 0 8 156 203 0 1 100 0 0
0 0 0 2273832 32984 701016 0 0 0 80 649 531 1 2 98 0 0
0 0 0 2274052 32984 701056 0 0 0 8 491 431 0 1 98 0 0
0 0 0 2274336 32984 701060 0 0 0 4 107 192 0 0 100 0 0

指标解读如下所示:
r:如果在 procs 中运行的序列 (process r) 是连续的大于在系统中的 CPU 的个数,表示 CPU 比较忙,系统现在运行比较慢,有多数的进程等待 CPU。如果 r 的输出数大于系统中可用 CPU 个数的 4 倍的话,则系统面临着 CPU 短缺的问题,或者是 CPU 的速率过低,系统中有多数的进程在等待 CPU,造成系统中进程运行过慢。
b:如果在 procs 中运行的序列 (process b),即处于不可中断状态的进程数,连续为 CPU 的 2~3 倍就表明 CPU 排队比较严重了。
• SYSTEM
in:每秒产生的中断次数。
cs:每秒产生的上下文切换次数。
in 和 cs 这两个值越大,会看到由内核消耗的 CPU 时间会越大。
• CPU
us:用户进程消耗的 CPU 时间百分。us 的值比较高时,说明用户进程消耗的 CPU 时间多,在服务高峰期持续大于 50~60,是可以接受,但是如果长期超 50% ,那么我们就该考虑优化程序算法。
sy:内核进程消耗的 CPU 时间百分比。sy 的值高时,说明系统内核消耗的 CPU 资源多,这并不是良性表现,我们应该检查原因。
wa:IO 等待消耗的CPU时间百分比。wa 的值高时,说明 IO 等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
id:CPU 处于空闲状态时间百分比,如果空闲时间 (cpu id) 持续为 0 并且系统时间 (cpu sy) 是用户时间的两倍 (cpu us) 系统则面临着 CPU 资源的短缺,在服务高峰期持续小于 50,可以接受。
通过以下方式可以判断 CPU 性能:
• 如果 r 连续大于 CPU 的个数,甚至几倍 CPU 个数;b 也有持续有值,甚至 CPU 的 2~3 倍,并且 id 也持续小于 50%,wa 也比较小,这就表明 CPU 负荷很严重。
• 再详细确认用:sar -u 1 5,sar -q 1 5,可以观察 CPU 的使用率和 CPU 运行进程队列长度及负载。
• 查看具体是什么进程在消耗 CPU,就要使用命令:top,ps –auxw | more。
• 知道了某个进程消耗大量的 CPU,想知道这个进程在做成什么,那就用命令:strace。
磁盘 I/O 性能诊断
我们在 Linux 服务器排查问题时,一般会通过 top、vmstat、free、netstat、df -h 等命令排查 CPU、内存、网络和磁盘等问题。有的时候我们需要更进一步了解磁盘 I/O 的使用情况。本文介绍常用 I/O 性能分析命令和性能诊断方法。
I/O 性能分析命令
iostat
iostat 是 Linux 最常见的磁盘 I/O 监控工具。
• 基本用法
$iostat -d -x -k 1 10
-d 表示:显示设备(磁盘)使用状态。
-k 表示:某些使用 block 为单位的列强制使用 Kilobytes 为单位。
1 10 表示:数据显示每隔 1 秒刷新一次,共显示 10 次。
-x 参数:我们可以获得更多统计信息。

• 参数含义
rrqm/s:每秒进行 merge(多个 IO 的合并)读操作的数量。
wrqm/s:每秒进行 merge(多个 IO 的合并)写操作的数量。
rsec/s:每秒读取的扇区数。
wsec/s:每秒写入的扇区数。
rKB/s:每秒读多少k字节,在 kernel 2.4 以上,rkB/s=2×rsec/s,因为一个扇区为 512 bytes。
wKB/s:每秒写多少k字节,在 kernel 2.4 以上,wkB/s=2×wsec/s,因为一个扇区为 512 bytes。
avgrq-sz:平均请求扇区的大小。
avgqu-sz:是平均请求队列的长度。毫无疑问,队列长度越短越好。
await:每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5 ms,如果大于 10 ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm:表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢。
%util:在统计时间内所有处理 IO 时间,除以总共统计时间,该参数暗示了设备的繁忙程度,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
iotop
iotop 是一个用 python 编写的类似 top 界面的磁盘 I/O 监控工具。
• 基本用法
iotop

• 参数含义
DISK READ 和 DISK WRITE 字段:代表块设备在采样时间内的 I/O 带宽。
SWAPIN 和 IO 字段:表示当前进程或线程花费在页面换入和等待 I/O 的时间。
PRIO 字段:表示 I/O 优先级。
Total DISK READ 和 Total DISK WRITE 字段:表示总的 I/O 读写情况。
• 常用参数
-o --only 只显示实际具有 I/O 操作的进程或线程。可以通过快捷键 o 进行控制
-b --batch 非交互式模式,可以用于保存输出结果
-n 刷新次数
-d 刷新间隔时间
-P 只显示进程,不显示线程
-p 监控指定进程或线程
-k 使用 KB 表示 I/O 带宽。默认情况下,iotop 使用 B/s,K/s,M/s 表示 I/O 带宽。
-u 监控指定用户的 I/O 操作情况
-t 在每行输出加上时间戳
-q 只在第一次输出时显示列名称
-qq 不显示列名称
-qqq 不显示总的 I/O 信息
I/O 性能诊断
用 vmstat 命令了解系统状况
[root@dm8 ~]# vmstat 1 10
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2074352 93616 732548 0 0 41 25 77 82 0 1 99 0 0
0 0 0 2074600 93616 732548 0 0 0 8 128 194 0 0 100 0 0
0 0 0 2074432 93616 732548 0 0 0 8 193 234 0 1 99 0 0
0 0 0 2074416 93616 732548 0 0 0 8 121 194 0 0 100 0 0
0 0 0 2074424 93616 732548 0 0 0 24 136 194 0 0 100 0 0
0 0 0 2074700 93624 732540 0 0 0 80 771 721 0 2 98 0 0
0 0 0 2074796 93624 732552 0 0 0 4 100 180 0 0 100 0 0
0 0 0 2074672 93624 732552 0 0 0 8 107 179 0 0 100 0 0
0 0 0 2074860 93624 732552 0 0 0 8 164 224 0 0 100 0 0
0 0 0 2074596 93624 732552 0 0 0 8 114 187 0 0 100 0 0
如果 b 的值为 2~3 倍 CPU 数量,bi 和 bo 的值很大(有时 bi 和 bo 值很小,但 in 和 cs 很大,也会引起磁盘 IO 负载重),wa 的值持续很高,如高于 40,id 也持续高于 70,这些现象都表明系统的 IO 可能出现性能问题。可以进一步通过 iostat 命令分析,如下所示:
[root@dm8 ~]# iostat -x 1 5
Linux 2.6.32-642.kb5.ky3.x86_64 (dm8) 2020年11月02日_x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.09 0.00 0.72 0.03 0.00 99.17

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 3.04 19.26 3.90 4.33 312.06 188.78 60.85 0.02 2.07 0.36 3.61 1.70 1.40
dm-0 0.00 0.00 6.67 23.60 309.97 188.77 16.48 0.08 2.64 0.54 3.24 0.46 1.40
dm-1 0.00 0.00 0.07 0.00 0.57 0.00 8.00 0.00 0.22 0.22 0.00 0.13 0.00
查看 iostat 的结果时注意事项如下:

  1. 首先看 %util(服务 IO 的时间占总时间的百分比),如果这个值接近 100%,表示 IO 的请求很多(表示任务服务的所有时间几乎都用在 IO 上),这种现象表明磁盘 IO 性能出现瓶颈。
  2. 再看 await(表示每次io设备等待时间)和 svctm(表示每次 IO 设备服务时间,一般性能越好的磁盘,这个值越小)。
    如果 svctm 接近 await ,说明 IO 几乎没有等待,每个 IO 设备都得到及时的响应。
    如果 svctm 远小于 await ,说明 IO 等待队列可能很长,IO 的得到服务的时间将延长(排队+服务时间)。
  3. avgqu-sz:表示 IO 排队的现象,如果排队过长会影响 IO 的响应时间。
  4. r/s+w/s:可以计算当前系统的 iops(可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的 iops 最大值)。
    通过 iostat 了解到如果磁盘 I/O 出现性能瓶颈,我们可以借助 pidstat ,定位出导致瓶颈的进程,分析进程的 I/O 行为,结合应用程序的原理,分析这些 I/O 的来源。

https://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能自已2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值