六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

linux性能关注-io

[复制链接]

升级  23.33%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
85
 楼主| 发表于 2013-1-15 02:12:51 | 显示全部楼层 |阅读模式
最近服务器有io的瓶颈,在查找资料的过程中,找到几遍好文章,分享一下。
其中作者针对内核监控io的方法做了总结,又有脚本的支持。以及对监控数据的说明,很好。
 
如何查看进程 IO 读写情况?

监测 Linux 进程的实时 IO 情况

 
标记一下,Kernel < 2.6.20的python脚本


#!/usr/bin/python# Monitoring per-process disk I/O activity# written by http://www.vpsee.com import sys, os, time, signal, reclass DiskIO:    def __init__(self, pname=None, pid=None, reads=0, writes=0):        self.pname = pname        self.pid = pid        self.reads = 0        self.writes = 0def 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() 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表