交换空间使用量
通过 Swap 技术, Linux 内核可以将较少被访问的 内存页 交换到设定好的 磁盘空间 。释放出来的内存页可另做他用,以缓解系统的内存压力。
交换空间通常是一个 磁盘分区 ,但是也可以是一个 文件 。物理内存 和 交换空间 的总大小是理论上可以使用的内存总量——也称作 虚拟内存 总量。
[virtual = physical + swap]
警告
虽然 交换分区 理论上可以增加系统可用的内存总量,但不能滥用。由于 磁盘 的访问速度远比 内存 慢, 频繁的交换操作将拖垮系统 。因此,对 交换空间 使用情况进行监控很有必要。
指标
指标名 | 含义 |
---|---|
total | 交换空间总量 |
free | 空闲交换空间(未使用) |
used | 已用交换空间 |
total
total 表示 交换空间总量 ,单位为 字节 ,对应 /proc/meminfo 的 SwapTotal 字段。
free
free 表示 空闲交换空间 ,单位为 字节 ,对应 /proc/meminfo 的 SwapFree 字段。
used
used 表示 已用交换空间 ,单位为 字节 ,可由前两个字段计算而来:
[used = total - free]
采集
同样,一个简单的 Python 程序读取 /proc/meminfo 文件即可采集数据:
import json
UNIT_MAPPING = {
'kB': 1024,
'KB': 1024,
}
def parse_value(value):
# default, no unit
unit = ''
# split value string
parts = value.strip().split()
if len(parts) == 2:
number, unit = parts
else:
number, = parts
return int(number.strip()) * UNIT_MAPPING.get(unit.strip(), -1)
def sample_memory_usage():
# open data file
with open('/proc/meminfo') as f:
# open all lines
lines = f.readlines()
# split every line to a pair by :
pairs = [
line.strip().split(':', 1)
for line in lines
]
# data dict
datas = {
name.strip(): parse_value(value)
for name, value in pairs
}
# calculate
total = datas['SwapTotal']
free = datas['SwapFree']
used = total - free
return {
'total': total,
'free': free,
'used': used,
}
if __name__ == '__main__':
usage = sample_memory_usage()
print(json.dumps(usage, indent=4))
下一步
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :