服务器资源采集

cpu使用采集

Linux的CPU使用率信息可以通过 /proc/stat 文件计算得到。/proc/stat 包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计的,单位为jiffies

root@XXXX:/data/home/XXX# cat /proc/stat | grep 'cpu' 
cpu 95437746 32 24265376 7465005603 7796243 1519 4335510 0 0 0 
cpu0 7466498 2 1407025 306335463 590252 109 351612 0 0 0 
cpu1 7273049 0 1705355 306622392 562050 112 342781 0 0 0 
cpu2 6733335 5 1660868 306929985 576424 93 325344 0 0 0 
cpu3 6472024 2 1919518 307244781 557953 98 300159 0 0 0 
cpu4 6668797 0 1546640 307119293 606800 63 260103 0 0 0 c
pu5 6323355 1 1354468 307683672 578870 64 236279 0 0 0 
cpu6 8694518 0 1410405 305271598 420758 55 314002 0 0 0 
cpu7 6148377 1 1264383 308445566 399519 50 200748 0 0 0 
cpu8 5748207 5 1523884 308538765 427474 46 191919 0 0 0 
cpu9 4660666 2 1601920 309513640 431980 46 173813 0 0 0 c
pu10 5462723 1 1364404 309038920 413696 50 194059 0 0 0 
cpu11 5159830 3 1176848 309439377 412922 48 175634 0 0 0 
cpu12 2750928 0 740011 312476124 338191 143 260653 0 0 0 
cpu13 2547955 1 936027 312466557 322650 138 248924 0 0 0 
cpu14 2583720 0 802039 312626559 296125 152 247577 0 0 0 
cpu15 2546840 0 694728 312749117 307404 150 233516 0 0 0 
cpu16 1363146 0 402344 314807967 154086 19 59672 0 0 0 
cpu17 1311191 0 400912 314833885 166464 18 52947 0 0 0 
cpu18 1328266 0 346806 315082676 45472 12 51517 0 0 0 
cpu19 685345 2 570098 315544015 32795 7 23060 0 0 0 
cpu20 692669 0 407326 315695737 38095 9 23443 0 0 0 
cpu21 854437 0 327793 315615426 44156 10 22783 0 0 0 
cpu22 908316 0 379316 315561457 30755 5 21127 0 0 0 
cpu23 1053546 0 322247 315362621 41344 14 23830 0 0 0

cpu一行指的是总的CPU信息,cpu0......cpu23几行指的是CPU各个核的CPU信息。从这里也可以看出这台服务器共有24个核。每列从左到右的意思为:

 ​​​​​​

  • 1、1 jiffies = 0.01s = 10ms
  • 2、常用计算等式:CPU时间 = user + system + nice + idle + iowait + irq + softirq

3、man手册中iowait有单独说明,iowait时间是不可靠值,具体原因如下:
        1)CPU不会等待I/O执行完成,而iowait是等待I/O完成的时间。
当CPU进入idle状态,很可能会调度另一个task执行,所以iowait计算时间偏小;
        2)多核CPU中,iowait的计算并非某一个核,因此计算每一个cpu的iowait非常困难
        3)这个值在某些情况下会减少

根据这些信息,就可以计算出CPU使用率,这里举例子说明整机cpu的使用率:

MEM使用采集

一般我们可以通过free -h来查看当前服务器上内存占用情况:


[root@XXX ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        880M        133M        2.0G        2.7G        586M
Swap:            0B          0B          0B

Mem:表示物理内存
Swap:表示硬盘交换分区
其中Mem中的total、used、free、shared、buffers、cached表示如下:
total:表示物理内存总量。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存。
buffers:系统分配但未被使用的buffers数量。
cached:系统分配但未被使用的cache数量。
buffers/cached中的total、used、free表示如下:
used:实际使用的buffers与cache总量,也是实际使用的内存总量。
free:未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可用内存。
available:空闲内存减去系统部不好回收的内存。

Linux内核会把空闲的内存用作buffer/cached,用于提高文件读取性能。当应用程序需要用到内存时,buffer/cached内存是可以马上回收的。所以,对应用程序来说,buffer/cached是可用的,可用内存应该是free+buffers+cached。

如何计算内存占用:

MEM使用量:Mem.total - Mem.free

MEM总大小:Mem.total

应用程序使用内存:    Mem.total - Mem.free - (buffers + cached - shared)

进程占用内存可参考:Linux内存管理 -- /proc/{pid}/smaps讲解_proc smaps_confirmwz的博客-CSDN博客 

网络IO采集

proc/net/dev是提供给用户读取或更改网络适配器及统计信息的途径,可以通过读取该文件查看系统的流量和包量情况。

[root@xxx ~]$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
veth0b68bbc:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
vethb5ee3e2: 37530815  261062    0    0    0     0          0         0 19439231  262588    0    0    0     0       0          0
  eth0: 227285994782 613289178    0    0    0     0          0         0 346855514848 522298330    0    0    0     0       0          0
    lo: 52896485274 64401660    0    0    0     0          0         0 52896485274 64401660    0    0    0     0       0          0
br-137050203a59: 567258612 4052142    0    0    0     0          0         0 609467371 3590862    0    0    0     0       0          0
br-91d5dd5f43ec:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
docker0: 838386402 2023766    0    0    0     0          0         0 505865102 1930936    0    0    0     0       0          0

Receive:接收的量

Transmit:发送的量

上面各个指标说明:

这里以获取eh1的1分钟流量情况为例:

1.     读取/proc/net/dev文件,获取eth1的Receive.bytes、Receive.packets、Transmit.bytes、Transmit.packets,分别记为receive_bytes0、receive_packets0、transmit_bytes0、transmit_packets0

2.     等待60秒

3.     再次读取/proc/net/dev文件,获取eth1的Receive.bytes、Receive.packets、Transmit.bytes、Transmit.packets,分别记为receive_bytes1、receive_packets1、transmit_bytes1、transmit_packets1

4.     根据n秒前后的/proc/net/dev文件的数据,可计算出下面的指标:

60秒内平均每秒入流量:(receive_bytes1 - receive_bytes0) * 8 /60/ 1024 (kbps)

(乘以8是为了把bytes转成bit,除以1024是为了把单位转成k,除以60则是取60秒内的平均值)

1GB=1024MB,1MB=1024KB,1KB=1024B,1B=8bit

60 秒内平均每秒出流量:(transmit_bytes1 - transmit_bytes0) * 8 / 60 / 1024 (kbps)

60秒内平均每秒入包数:(receive_packets1 - receive_packets0) / 60 (个)

60秒内平均每秒出包数:(transmit_packets1 - transmit_packets0) / 60 (个)

备注:网卡最大都是10000Mb/s(ethtool eth1查看);网卡需要算上行+下行总和,也就是这里的入流量+出流量的总和

磁盘IO采集        

iostat 主要用于输出磁盘IO 和 CPU的统计信息

用法:iostat [选项] [<时间间隔>] [<次数>]

命令参数:

-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况

这里我们就直接 用iostat -x [次数]来获取详细信息

统计方法:每4s统计一次,60s后取uitil的最大值为60s内整机io使用率

GPU-显存

nvidia-smi是用来查看GPU使用情况的

Memory-Usage:使用显存/总显存

GPU-Util:当前gpu利用率

如何计算60s内的显存占用和gpu利用率:

获取当前机器上的子卡数目,根据子卡数目分别获取显存占用和gpu利用率占用信息

 

每1s中获取1次信息,60s后used_mem=max(mem)/total_mem,util=avg(util)

disk-磁盘增长速度

服务一般部署到/data/service目录下,容器也是如此,这里我们致统一改目录下的空间大小

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值