如何监测Linux进程的实时IO读写情况
作者:应用开发 来源:系统运维 浏览: 【大中小】 发布时间:2025-11-05 09:09:29 评论数:

复制#!/usr/bin/python # Monitoring per-process disk I/O activity # written by http://www.vpsee.com import sys,何监 os, time, signal, re class DiskIO: def __init__(self, pname=None, pid=None, reads=0, writes=0): self.pname = pname self.pid = pid self.reads = 0 self.writes = 0 def main(): argc = len(sys.argv) if argc != 1: print"usage: ./iotop" sys.exit(0) if os.getuid() != 0: print"must be run as root" sys.exit(0) signal.signal(signal.SIGINT, signal_handler) os.system(echo 1 > /proc/sys/vm/block_dump) print"TASK PID READ WRITE" whileTrue: os.system(dmesg -c > /tmp/diskio.log) l = [] f = open(/tmp/diskio.log, r) line = f.readline() while line: m = re.match(\ ^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+), line) if m != None: ifnot l: l.append(DiskIO(m.group(1), m.group(2))) line = f.readline() continue found = False for item in l: if item.pid == m.group(2): found = True if m.group(3) == "READ": item.reads = item.reads + 1 elif m.group(3) == "WRITE": item.writes = item.writes + 1 ifnot found: l.append(DiskIO(m.group(1), m.group(2))) line = f.readline() time.sleep(1) for item in l: print"%-10s %10s %10d %10d" % \ (item.pname, item.pid, item.reads, item.writes) def signal_handler(signal, frame): os.system(echo 0 > /proc/sys/vm/block_dump) sys.exit(0) if __name__=="__main__": main() 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.
