【银河麒麟】云平台查看内存占用与实际内存占用不一致,分析&处理过程,附代码

 了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区https://product.kylinos.cn

1.需求/问题描述

发现云平台查看内存占用与实际内存占用不一致。

2.分析过程

在系统中获取虚拟机内存使用率目前主要有两种方式,一种是通过virsh dommemstat获取,另外一种是通过qga接口获取。由于之前修复界面虚拟机cpu使用率时为qga接口获取,因此主要从qga接口介入查询。

在qga接口中预留了查询vcpu使用率,内存使用率(used/total),网卡等信息查询。

通过上述代码定义,可以使用

virsh qemu-agent-command vm

'{"execute":"guest-band-info","arguments":{"order":"None"}}' --pretty查询到虚拟机vcpu、内存、网卡等相关信息。

在上述返回结果中,可以看到其中包括内存各项信息,有返回内存usage使用率信息,通过对比虚拟机内查询到的内存信息,如下所示

在对比qga返回结果与虚拟机内的内存信息后,qga返回used与系统内used不一致,该处used=系统内used+buff/cache 之和,计算内存使用率均正常。从此时可以判断出qemu源码中计算内存使用率正确。

3.分析结果

根据内存使用率计算方式,以下图为例,根据qga中提供的使用率计算

MemUsage=(used+buff/cache)/total

即:(5482+55706)/63939=0.9569,换算百分比为95.69%,与界面显示内存使用率一致,证明qga获取的内存使用率无误,qemu侧无需修改。

附:内存使用率

如上图,linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。对于上述的情况,正确的解释是:linux的内存管理机制与windows的有所不同。linux的内存管理机制的思想主要是内存利用率最大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当系统运行时间较久,会发现cached很大,对于有频繁文件读写操作的系统,这种现象会更加明显。此时free的内存会非常小,但并不代表可用的内存小,当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。

各字段含义:

total:系统中总的物理内存量。

used:已被使用的内存量,这包括用于系统进程、应用程序和文件系统缓存的内存。

free:未被使用的内存量,这是未被分配给任何进程的空闲内存。

shared:被共享的内存量,这是多个进程共享的内存,如共享库或共享内存段。

buff/cache:用于缓存的内存量,这包括用于文件系统缓存(buffers)和磁盘缓存(cache)的内存。

available:可用内存量,这部分内存可以被应用程序申请使用

free或者top等查询内存信息均来自/proc/meminfo中的数据结构信息

其中MemAvailble:代表当前可用内存,MemFree只是尚未分配的内存,并不是所有可用的内存。有些已经分配掉的内存是可以回收再分配的。比如cache/buffer、slab都有一部分是可以回收的,这部分可回收的内存加上MemFree才是系统可用的内存,即MemAvailable。同时要注意,MemAvailable是内核使用特定的算法估算出来的,并不精确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值