前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云cvm 内存使用率监控指标解读

腾讯云cvm 内存使用率监控指标解读

原创
作者头像
钟进达
发布2020-10-26 10:48:28
5.8K1
发布2020-10-26 10:48:28
举报
前言

腾讯云cvm内存使用率监控指标到底是怎么统计的?按照官网的解释,内存使用率是用户实际使用的内存量与总内存量之比,不包括缓冲区与系统缓存占用的内存。 官网这里解释比较笼统, 是free 命令里面的(total-free)100%/total? 还是(total-free-buffer/cache)100%/total? 答案都不是,具体看下面的解释。

tapd_20421800_1603678694_41.png
tapd_20421800_1603678694_41.png
/proc/meminfo 关键指标说明
[root@VM_0_113_centos test]# cat /proc/meminfo 
MemTotal:       16265592 kB
MemFree:         1880084 kB
......
Buffers:          194384 kB
Cached:         13647556 kB
......
Shmem:           7727752 kB
Slab:             328864 kB
SReclaimable:     306500 kB
SUnreclaim:        22364 kB
......

MemTotal: 系统总的内存

MemFree:系统剩余内存

Buffers:表示块设备(block device)所占用的缓存页,包括:直接读写块设备、以及文件系统元数据(metadata)比如SuperBlock所使用的缓存页

Cached: page cache, 包含tmpfs中的文件,POSIX/SysV shared memory,以及shared anonymous mmap

Shmem: 包括共享内存,tmpfs等

Slab: 内核slab 分配器分配的内存,可以用slabtop查看

SReclaimable: 可回收的slab

SUnreclaim: 不可回收的slab

barad监控agent关于内存使用率算法

内存使用率算法关键函数可以直接看云服务器barad agent的采集脚本,在 /usr/local/qcloud/monitor/barad/lib/psutil/_pslinux.py文件下面(写于2020-10-24,后续如果有变更,可以根据mem_usage关键字查找跟踪对应代码实现)

def virtual_memory():
    total, free, buffers, shared, _, _ = cext.linux_sysinfo()
    cached = active = inactive = sreclaimable = shmem = 0
    with open('/proc/meminfo', 'rb') as f:
        for line in f:
            if line.startswith(b"Cached:"):
                cached = int(line.split()[1]) * 1024
            elif line.startswith(b"Active:"):
                active = int(line.split()[1]) * 1024
            elif line.startswith(b"Inactive:"):
                inactive = int(line.split()[1]) * 1024
            elif line.startswith(b"Shmem:"):
                shmem = int(line.split()[1]) * 1024
            elif line.startswith(b"SReclaimable:"):
                sreclaimable = int(line.split()[1]) * 1024

            else:
                # we might get here when dealing with exotic Linux flavors, see:
                # https://github.com/giampaolo/psutil/issues/313
                continue

    cached += sreclaimable
    avail = free + buffers + cached - shmem
    used = total - free
    percent = usage_percent((total - avail), total, _round=1)
    return svmem(total, avail, percent, used, free,
                 active, inactive, buffers, cached)
                

通过上面的函数,我们可以得出内存使用率算法:

内存使用率 = (Total - avail)100% / Total = (Total - (Free + Buffers + Cached + SReclaimable - Shmem))100% /Total = ( Total - Free - Buffers - Cached - SReclaimable + Shmem)* 100% / Total, 这里的Total,Free,Buffer,Cached,SReclaimable,Shmem 对应/proc/meminfo的指标。( 注意 shmem统计的是共享内存使用的内存,对应的值也统计到了Cached,因为shmem在内存不足时是不会自动回收的,所以shmem不能统计到剩余可用内存里面,需要减掉 )

注意事项

不能简单通过free 命令输出计算内存使用率,因为不同linux发行版的free命令输出表示的意思可能有区别,最常见的是centos6.x跟centos7.x的区别,centos6.x free命令输出的buffer/cache不包括/proc/meminfo的SReclaimable,而centos7.x free命令输出的buffer/cache是包括/proc/meminfo的SReclaimable。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • /proc/meminfo 关键指标说明
  • barad监控agent关于内存使用率算法
  • 注意事项
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档