zoukankan      html  css  js  c++  java
  • 查看进程的io

    linux系统上可以使用(centos 2.6.18-144开始支持),dstat版本至少是:dstat-0.6.7-1.rf.noarch.rpm
    安装
    wget -c http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm
    rpm -Uvh dstat-0.6.7-1.rf.noarch.rpm


    使用
    # dstat -M topio -d -M topbio

    内核低版本的用这个Python脚本

    #!/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"
        while True:
            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:
                    if not 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
                    if not 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() 
  • 相关阅读:
    DataTable 类(二)处理表中的数据
    .NET中的正则表达式
    DataTable 类(一)表结果操作
    DataGridView(2)数据操作
    DataGridView(一)
    VS2008中配置 Windows SDK v7
    TabControl
    .NET中的正则表达式 (一)Regex 类
    db2的count()函数和sum()函数的用法
    显示原始字符串
  • 原文地址:https://www.cnblogs.com/cmsd/p/3484943.html
Copyright © 2011-2022 走看看