操作系统监控

系统资源监控

操作系统监控

  • 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监控

有点复杂

posted @ 2021-09-12 19:27  DeyouKong  阅读(754)  评论(0编辑  收藏  举报