用于监控 /proc/diskstats 的 Python 库?

5 投票
4 回答
6266 浏览
提问于 2025-04-16 01:48

我想在一个Python程序中监控系统的输入输出负载,获取类似于Linux中/proc/diskstats提供的统计信息(当然,如果有一个跨平台的库就更好了)。请问有没有现成的Python库可以用来查询Linux上的磁盘输入输出统计信息?

4 个回答

2

定期读取 /proc/diskstats 有什么问题呢?比如用 sched 每分钟重复这个操作,或者其他的频率?Linux 的 procfs 很棒,因为它以文本的形式让内核向用户程序提供信息,文本在很多编程语言中都很容易读取和使用……!

6

PSUtil 是一个可以提供很多关于磁盘和文件系统状态的信息的工具,而且它可以在不同的操作系统上使用。

你可以看看 psutil.disk_io_counters(perdisk=True) 这个函数,它会返回一些很有用的数据:

read_count: number of reads
write_count: number of writes
read_bytes: number of bytes read
write_bytes: number of bytes written
read_time: time spent reading from disk (in milliseconds)
write_time: time spent writing to disk (in milliseconds)

这些数据来自于 /proc/diskstats 文件(在Linux系统上)。

10

如果还有其他人像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

撰写回答