Linux系统调优时需要用到一些工具来查看和分析CPU/内存/磁盘/网络的情况,先根据四个方面对接的工具进行介绍。
一、CPU性能调优工具
1. vmstat命令
vmstat(virtual memory statistics 虚拟内存统计)的缩写。
使用语法:
vmstat [-V] [-n] [delay [count]]
[root@master79100 ~]# vmstat 3 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 6 0 70256 20 272432 0 0 3611 34 665 771 3 3 34 60 0
0 9 0 64700 20 276284 0 0 18383 17 2727 3192 0 2 7 91 0
1 8 0 72560 20 266804 0 0 20960 31 3370 3398 8 3 15 74 0
0 9 0 64128 20 275784 0 0 15827 8 3785 4706 1 3 25 70 0
0 8 0 63440 20 274000 0 0 16412 251 3608 4437 1 3 27 69 0
- procs:显示队列和等待状态
r:运行和等待cpu时间片的进程数,该值长期大于cpu个数表示CPU不足
b:等待资源的进程数,如正在等待I/O、内存交换等 - memory:显示物理内存状态
spwd:切换到内存交换区的内存数量(以KB为单位)。spwd不为0,si/so为0即可。
free:当前空闲的物理内存数量(以KB为单位)
buff:buffers cache的内存数量,一般对块设备的读写才需要缓冲
cache:page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached。若cache值越大,说明cached的文件数越多,I/O中bi比较小,说明文件系统效率比较好。 - swap: 显示交换分区的使用状态
si:由磁盘调入内存,是内存进入内存交换区的数量
so:由内存调入磁盘,是内存交换区进入内存的数量 - io:显示磁盘读写状况
bi:(读磁盘)从块设备读入数据的总量(KB/s)
bo:(写磁盘)写入到块设备的数据总量(KB/s) - system: 采集间隔内发生的中断数
in:某一时间间隔中观测到每秒设备中断数
cs:每秒产生的上下文切换次数 - cpu:
us:用户进程消耗的cpu时间百分比,us的值越高,说明用户进程消耗的cpu时间多,长期大于50%,需要优化程序或算法
sy:内核进程消耗的cpu时间百分比
id:CPU处于空闲状态的时间百分比
wa:I/O等待所占用cpu时间百分比
重点注意:procs的r对应的值和CPU项us、sy和id值
2.uptime
[root@master79100 ~]# uptime
01:31:23 up 1:46, 2 users, load average: 0.81, 0.54, 0.94
依次表示:系统现在的时间,运行时间,系统多少用户登录,1min/5min/15min内的平均负载。
load average:三个值不能大于cpu的个数,长期大于CPU个数,说明cpu负载很高,会影响系统性能。
3.mpstat
[root@master79100 ~]# mpstat 3 5
Linux 3.10.0-693.el7.x86_64 (master79100) 05/03/2021 _x86_64_ (4 CPU)
01:35:29 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01:35:32 AM all 0.69 0.09 1.72 0.17 0.00 0.34 0.00 0.00 0.00 96.98
01:35:35 AM all 1.22 0.00 1.75 0.09 0.00 0.35 0.00 0.00 0.00 96.60
01:35:38 AM all 0.96 0.00 1.31 0.00 0.00 0.26 0.00 0.00 0.00 97.47
01:35:41 AM all 0.86 0.00 1.55 0.09 0.00 0.26 0.00 0.00 0.00 97.24
01:35:44 AM all 1.30 0.09 1.38 0.26 0.00 0.17 0.00 0.00 0.00 96.80
Average: all 1.01 0.03 1.54 0.12 0.00 0.28 0.00 0.00 0.00 97.02
- CPU:处理器ID
- %usr:用户进程消耗cpu时间百分比
- %nice : 运行正常进程所消耗cpu时间百分比
- %sys :系统进程消耗cpu时间百分比
- %iowait : I/O等待所占用cpu时间百分比
- %irq :中断时间所用的cpu时间百分比
- %soft : 软中断时间占用的cpu时间百分比
- %steal :内存相对紧张的环境下page in 强制对不同的页面进行的steal操作
- %guest :运行虚拟处理器时CPU花费时间点的百分比
- %gnice :运行带有nice优先级的虚拟CPU所花费的时间百分比
- %idle:显示CPU处于空闲状态的时间百分比
%idle较低时,可能CPU不足; %iowait 较高时,可能当前负载下I/O子系统出现的某些问题。
二、内存性能调优工具
内存分析常用的工具:free、smem
1、free
[root@master79100 ~]# free -g
total used free shared buff/cache available
Mem: 0 0 0 0 0 0
Swap: 0 0 0
[root@master79100 ~]# free
total used free shared buff/cache available
Mem: 999720 589904 63688 13496 346128 140328
Swap: 0 0 0
[root@master79100 ~]#
free 命令输出中显示了系统的各种内存状态,具体包括物理内存和swap。
物理内存分为已使用内存(used)、空闲内存(free)、共享内存(shared)、系统缓存(buff/cache)、目前可用内存(available)
total=used+free+buff/cache
2、smem命令
smem是一款命令行下的内存使用情况报告工具,能够给用户提供linux系统下内存使用的多种报告。
RSS(Resident Set Size):用top命令可用查询到,是最常用的内存指标,表示进程占用的物理内存大小。但将各个进程的RSS值相加,通常会超出整个系统的内存消耗,因为RSS中包含了各个进程间的共享内存。
PSS(Proportional Set Size):所有使用某共享库的程序均分该共享库占用的内存,显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存大小进行平均后,再分摊到各进程上去。
USS(Unique Set Size):进程独自占用的内存,它只计算了进程占用的内存大小,不包含任何共享部分。
smem -k -s uss
-k参数用来显示内存单位
-s表示排序
uss表示对USS进行排序
[root@master79100 ~]# smem -k -s uss
PID User Command Swap USS PSS RSS
1789 root /pause 0 40.0K 44.0K 68.0K
1802 root /pause 0 40.0K 44.0K 68.0K
1785 root /pause 0 44.0K 48.0K 72.0K
1788 root /pause 0 44.0K 48.0K 72.0K
2063 root /pause 0 60.0K 64.0K 88.0K
904 root /sbin/rngd -f 0 132.0K 135.0K 240.0K
- 百分比形式显示每个进程占用系统内存的比率
[root@master79100 ~]# smem -p -s uss
PID User Command Swap USS PSS RSS
1789 root /pause N/A 0.00% 0.00% 0.01%
1802 root /pause N/A 0.00% 0.00% 0.01%
- 查看某个进程占用内存的大小
[root@master79100 ~]# smem -k -P kube-controller-manager
PID User Command Swap USS PSS RSS
5759 root python /usr/bin/smem -k -P 0 5.2M 5.5M 6.3M
4472 root kube-controller-manager --a 0 42.0M 42.0M 42.0M
三、磁盘性能调优工具
磁盘性能评估的常用工具:iotop、iotop等
1、iotop
iotop类型与top的命令。
iotop跟一些选项,用来定制输出结果,常用选项:
-p:指定进程
-u:指定用户名
-P:只显示进程,默认显示所有的进程
-k:以千字节显示
-t:表示在每一行前添加一个当前时间。
2、iostat
iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的I/O操作进行监视,输出主要显示磁盘读写操作的统计信息。
[root@master79100 ~]# iostat -d
Linux 3.10.0-693.el7.x86_64 (master79100) 05/03/2021 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 120.58 5090.86 51.62 59319155 601460
dm-0 122.60 5090.29 51.62 59312600 601426
dm-1 0.01 0.18 0.00 2096 0
[root@master79100 ~]# iostat -d 3 5
Linux 3.10.0-693.el7.x86_64 (master79100) 05/03/2021 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 120.69 5093.88 51.60 59387083 601576
dm-0 122.69 5093.11 51.60 59378152 601542
dm-1 0.01 0.18 0.00 2096 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 281.67 7858.67 2.67 23576 8
dm-0 285.33 7848.00 2.67 23544 8
dm-1 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 246.00 2925.33 8.00 8776 24
dm-0 246.33 2928.00 8.00 8784 24
dm-1 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 311.00 12264.00 4.00 36792 12
dm-0 324.67 12304.00 4.00 36912 12
dm-1 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 411.33 11496.00 38.00 34488 114
dm-0 411.67 11466.67 38.00 34400 114
dm-1 0.00 0.00 0.00 0 0
- kB_read/s :每秒读取的数据块数
- kB_wrtn/s :每秒写入的数据块数
- kB_read:读取的所有块数
- kB_wrtn:写入的所有块数
kB_read/s值很大,表示磁盘的读操作很频繁,可以考虑优化磁盘或优化程序;
kB_wrtn/s 值很大,表示磁盘的写操作很频繁,可以将读取的数据放入内存中进行操作;
四、网络性能调优工具
网络性能评估的常用工具:ping、traceroute、mtr
1、ping:
time表示延时时间
packet loss表示丢包率
2、mtr IP
Loss% 丢包率信息
Snt 已发送数据包的数量
Last 最后一个包的延时
Avg 发生ping包的平均延时
Best 显示ping的最低延时
Wrst 显示ping的最差延时
StDev 显示标准差,一致度量数据分布的分散程度标准,标准差越小,网络的稳定性越好。
traceroute IP
五、综合性能分析工具
CentOS提供了一个更加强大的工具htop,在linux系统下执行htop即可展现htop的界面,类似于iotop和top的工具。
PID:进程标识号
USER:进程所有者的用户名
PRI:进程的优先级
NI:进程的优先级别数
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值时负数。
CPU%:该进程占用的CPU使用率
MEM%:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总CPU时间
Commad:进程启动的命令名称