操作系统监控
系统资源监控
操作系统监控
- cpu监控:top 命令
- 内存监控:free -m 命令(内存监控:buffer、cache、swap)
- 磁盘IO监控:iostat -x -k -d 1 (关注指标:%util,磁盘繁忙度) - (提前按照 sysstat:yum install -y sysstat)
- 磁盘空间监控:df -h 命令
- 综合监控工具:vmstat 3 (每3秒刷新数,据重点看swap)
- 超级监控工具:dstat -tcmnd --disk-util(yum install -y dstat)(重点看 %util)
- 支持数据存储的监控工具:nmon
1、操作系统监控-top命令
top - 09:03:24 up 3 days, 11:02, 2 users, load average: 0.05, 0.10, 0.11
Tasks: 122 total, 1 running, 121 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 1.3 sy, 0.0 ni, 97.5 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 1881856 total, 211992 free, 380192 used, 1289672 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1312560 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2827 root 20 0 1031840 43936 19432 S 1.0 2.3 48:00.56 YDService
1141 root 20 0 50088 1096 760 S 0.7 0.1 39:51.81 rshim
2900 root 20 0 678192 12524 2456 S 0.3 0.7 17:49.55 barad_agent
11424 root 20 0 157228 5912 4200 S 0.3 0.3 0:04.41 sshd
1 root 20 0 43548 3936 2588 S 0.0 0.2 0:22.49 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.20 kthrea
load average 平均负载,分别表示过去1分钟、5分钟、15分钟 cpu需要执行的任务数量,任务队列的平均长度,
重点看 1分钟,不超过CPU核数为佳,超过了需要上下文切换
第二行为当前系统的任务执行情况:总共任务122个,运行中1个,121个睡眠中
第三行为cpu具体数据(关键):
- id(idle):cpu空闲率,cpu使用率=100%-id(关键)
- us :用户进程使用的cpu,用户安装的程序(关注)
- sys:系统进程使用的cpu(关注)
- wa:iowait,等待io,磁盘、网络,如果比较高,就需要排查这两个(关注)
- hi:硬中断(硬件导致中断) - 鼠标、键盘等外部硬件
- si:软中断(软件导致中断) - 任务太多,cpu切换导致中断
以上统计的是CPU整体的使用情况
*** 在top命令中,输入数字1展示每个核的CPU使用情况(本机CPU为两核) ***
top - 09:30:28 up 3 days, 11:29, 2 users, load average: 0.00, 0.02, 0.05
Tasks: 121 total, 1 running, 120 sleeping, 0 stopped, 0 zombie
%Cpu0 : 1.0 us, 1.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu1 : 1.0 us, 1.3 sy, 0.0 ni, 97.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881856 total, 358884 free, 382500 used, 1140472 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1309936 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2827 root 20 0 1031840 44416 19456 S 1.3 2.4 48:19.84 /usr/local/qcloud/YunJing/YDEyes/YDService
1141 root 20 0 50088 1096 760 S 0.7 0.1 40:05.80 /usr/sbin/rshim
1 root 20 0 43548 3936 2588 S 0.0 0.2 0:22.61 /usr/lib/systemd/systemd --switched-root --system --+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.20 [kthreadd]
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
6 root 20 0 0 0 0 S 0.0 0.0 0:11.32 [ksoftirqd/0]
7 root rt 0 0 0 0 S 0.0 0.0 0:05.49 [migration/0]
输入 c 任务进程根据 cpu 使用率 排序,进程的 cpu 使用率上限不是100%,而是 cpu核数 x 100%,这里有两个核,上限为200%
输入 m 任务进程根据 memory 使用率 排序
2、内存监控:free -m 命令
[root@VM-12-13-centos ~]# free -m
total used free shared buff/cache available
Mem: 1837 374 214 0 1249 1277
Swap: 0 0 0
free -m 以MB为单位显示系统内存的使用情况,同理,也可以使用-k、-g等其他的单位显示
free命令从两个维度统计了内存的使用情况
第一行Mem:从操作系统角度统计内存的total、used、free、buffers、cached,系统可用内存看 available 即可
第二行-/+buffers:从应用程序角度统计内存的total、used、free、buffers、cached
内存监控:buffer(缓冲)、cache、swap
buffer和cache
两者都是Linux下的缓存机制,系统性能更高
buffer为写操作的缓存:即将写入磁盘的数据,先把数据写入buffer,cpu定时将内存中的数据写入磁盘(读写磁盘速度慢)
cache为读操作的缓存:系统从磁盘读取出来的数据,系统第一次从磁盘读取数据出来并放在 cache 中,下次再读取数据时先检查 cache 是否已经存在,存在时则从 cache 中读取,否则从磁盘读取
当前应用系统内存不足时,系统会自动将cache占用的部分内存释放给系统使用
swap
交换空间,磁盘上的一块空间,当系统内存不足时,会使用交换空间
频繁发生swap交换会导致性能问题
未在压测,swap不为0不一定有问题,但在性能测试过程中也正在发生swap(变化),那就是有问题(内存不足)
当前系统真正可用的内存为第一行的:buff/cache + free
3、磁盘IO监控:iostat
需要提前安装好sysstat yum install -y sysstat
- 1、直接执行 iostst
[root@localhost ~]# iostat
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 2021年09月12日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.08 0.01 0.00 99.88
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.78 14.99 7.53 252955 127138
dm-0 0.64 14.28 7.41 240987 125070
dm-1 0.01 0.13 0.00 2204 0
%user: 在用户级别运行所使用的CPU的百分比.
%nice: nice操作所使用的CPU的百分比.
%sys: 在系统级别(kernel)运行所使用CPU的百分比.
%iowait: CPU等待硬件I/O时,所占用CPU百分比.
%idle: CPU空闲时间的百分比.
sda 才是真正的磁盘,剩下两个都是虚拟磁盘,可以忽略
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)
- 2、指定采样时间间隔与采样次数
与sar命令一样,我们可以以"iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:
[root@localhost ~]# iostat -d 1 2
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 2021年09月12日 _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.79 14.53 7.52 252955 130826
dm-0 0.64 13.85 7.40 240987 128758
dm-1 0.01 0.13 0.00 2204 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.12 0.00 17.71 0 17
dm-0 2.08 0.00 17.71 0 17
dm-1 0.00 0.00 0.00 0 0
以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。
注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
- 3、更详细的io统计信息(-x选项)
为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:
[root@VM-12-13-centos ~]# iostat -x
Linux 3.10.0-1160.11.1.el7.x86_64 (VM-12-13-centos) 2022年04月22日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.44 0.00 0.54 0.04 0.00 98.98
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.01 1.75 0.10 2.45 3.83 20.21 18.88 0.01 2.31 3.31 2.27 0.37 0.09
scd0 0.00 0.00 0.00 0.00 0.00 0.00 7.10 0.00 0.30 0.30 0.00 0.30 0.00
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒往磁盘写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
从 rkB/s、wkB/s 是无法判断磁盘是否有问题,一般都是看 %util 比率,代表磁盘的繁忙度,高于90%时比较危险
对于以上示例输出,我们可以获取到以下信息:
每秒向磁盘上写20.21M左右数据(wkB/s值)
每秒有 2.55 次IO操作(r/s+w/s),其中以写操作为主体
判断磁盘是否存在问题:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (0.10+2.45)(0.37/1000)100% = 0.09435%
判断磁盘是否有问题,一般都是看 %util 比率,代表磁盘的繁忙度,高于90%时比较危险
4、磁盘空间监控 df -h
- df命令可以查看当前系统磁盘空间的使用情况
命令:df -h
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 484M 0 484M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.8M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 3.7G 14G 22% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 100M 0 100M 0% /run/user/0
一般都使用根目录
/dev/mapper/centos-root 17G 3.7G 14G 22% /
每次压测之前,先检查项目所在服务器的磁盘是否够用(记日志)
5、磁盘写入速度测试
命令:dd if=/dev/zero of=/export/ddtest bs=8k count=1000000 oflag=direct
从系统的某个文件拷贝到另一个文件夹下,每次拷贝8kb,共拷贝一百万次
/dev/zero 为系统无限输出的文件,可以产生无数的数据量
/export/ddtest 写入数据的目的文件,为自定义文件(/root/server/ddtest)
dd if=/dev/zero of=/root/server/ddtest bs=8k count=1000000 oflag=direct
[root@localhost server]# dd if=/dev/zero of=/root/server/ddtest bs=8k count=1000000 oflag=direct
^C记录了285180+0 的读入
记录了285180+0 的写出
2336194560字节(2.3 GB)已复制,56.0663 秒,41.7 MB/秒
6、综合监控工具-vmstat(重点看 swap 的数据)
vmstat命令综合了CPU、进程、内存、磁盘IO等信息
命令:vmstat 3 每3秒刷新一次数据
主要时用来对 swap 进行统计,如果swap的 si、so 长时间不为0 ,代表当前正在频繁进行swap,系统内存不够用了
si表示当前(三秒钟之内)每秒交换回内存(Swap in)的总量,单位为kbytes
so表示当前(三秒钟之内)每秒交换出内存(Swap out)的总量,单位为kbytes
[root@localhost server]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 212380 2108 395904 0 0 7 71 76 133 0 1 99 0 0
0 0 0 212264 2108 395892 0 0 0 22 131 208 2 3 95 0 0
0 0 0 212264 2108 395896 0 0 0 0 119 181 0 1 99 0 0
0 0 0 212104 2108 395896 0 0 0 0 226 272 3 3 94 0 0
0 0 0 212244 2108 395908 0 0 0 0 106 177 0 2 98 0 0
0 0 0 212256 2108 395912 0 0 0 21 110 182 1 1 98 0 0
0 0 0 212124 2108 395916 0 0 0 0 217 289 2 3 95 0 0
7、超级监控工具-dstat
dstat是一个全能监控工具,整合了CPU、内存、磁盘、网络等几乎所有的监控项,支持实时刷新
dstat需要先进行安装
yum install -y dstat
查看常用命令参:dstat --help
监控命令:dstat -tcmnd --disk-util
[root@localhost server]# dstat -tcmnd --disk-util
----system---- ----total-cpu-usage---- ------memory-usage----- -net/total- -dsk/total- sda-
time |usr sys idl wai hiq siq| used buff cach free| recv send| read writ|util
12-09 22:24:18| 0 1 99 0 0 0| 425M 2108k 358M 206M| 0 0 |7398B 68k|0.20
12-09 22:24:19| 1 2 97 0 0 0| 426M 2108k 358M 205M|1792B 3220B| 0 0 | 0
12-09 22:24:20| 2 2 96 0 0 0| 426M 2108k 358M 205M|2320B 5588B| 0 0 | 0
12-09 22:24:21| 2 3 95 0 0 0| 426M 2108k 358M 205M|4134B 11k| 0 23k|0.30
12-09 22:24:22| 1 2 97 0 0 0| 426M 2108k 358M 205M|1792B 2628B| 0 0 | 0
12-09 22:24:23| 1 1 98 0 0 0| 426M 2108k 358M 205M|2464B 4862B| 0 0 | 0
12-09 22:24:24| 1 4 94 0 0 1| 426M 2108k 358M 205M|3950B 11k| 0 0 | 0
12-09 22:24:25| 1 1 98 0 0 0| 426M 2108k 358M 205M|1852B 2612B| 0 17k|0.10^C
1、网络受吞吐量最差的那个组件限制
2、局域网内,不受带宽限制
3、每个组件与应用程序的上限对比
4、网络设备一般是千兆网卡(125MB)
8、网络IO监控
有点复杂