【发布时间】:2011-03-20 17:45:49
【问题描述】:
我想监控来自 python 程序的系统 IO 负载,访问类似于 linux 中/proc/diskstats 中提供的统计信息(尽管显然跨平台库会很棒)。是否有现成的 python 库可用于查询 linux 上的磁盘 IO 统计信息?
【问题讨论】:
标签: python linux io monitoring
我想监控来自 python 程序的系统 IO 负载,访问类似于 linux 中/proc/diskstats 中提供的统计信息(尽管显然跨平台库会很棒)。是否有现成的 python 库可用于查询 linux 上的磁盘 IO 统计信息?
【问题讨论】:
标签: python linux io monitoring
如果有人像 Alex 建议的那样尝试使用 Python 解析 /proc/diskstats:
def diskstats_parse(dev=None):
file_path = '/proc/diskstats'
result = {}
# ref: http://lxr.osuosl.org/source/Documentation/iostats.txt
columns_disk = ['m', 'mm', 'dev', 'reads', 'rd_mrg', 'rd_sectors',
'ms_reading', 'writes', 'wr_mrg', 'wr_sectors',
'ms_writing', 'cur_ios', 'ms_doing_io', 'ms_weighted']
columns_partition = ['m', 'mm', 'dev', 'reads', 'rd_sectors', 'writes', 'wr_sectors']
lines = open(file_path, 'r').readlines()
for line in lines:
if line == '': continue
split = line.split()
if len(split) == len(columns_disk):
columns = columns_disk
elif len(split) == len(columns_partition):
columns = columns_partition
else:
# No match
continue
data = dict(zip(columns, split))
if dev != None and dev != data['dev']:
continue
for key in data:
if key != 'dev':
data[key] = int(data[key])
result[data['dev']] = data
return result
【讨论】:
PSUtil 提供了许多磁盘和 fs 统计信息,并且也是跨平台的。
您应该查看psutil.disk_io_counters(perdisk=True),它返回了许多有用的指标:
这些指标来自/proc/diskstats(在 Linux 上)
【讨论】:
/proc/diskstats,但它的指标比原始 /proc/diskstats 少得多。我个人遇到了这个问题,因为我们已经在使用 psutil,但遗憾地错过了一些重要部分。
定期阅读 /proc/diskstats 有什么问题,例如使用sched 每分钟重复一次操作还是什么? Linux 的procfs 很好,正是因为它为内核提供了一种向用户态程序提供信息的文本方式,因为文本最容易在多种语言中阅读和使用......!
【讨论】:
我还没有看到库,但您可能想查看名为“dstat”[1] 的 Python 工具,用于读取 Linux 内核统计信息。
【讨论】: