linux 系统查看哪个进程占io

 我来答
XinFuLi
2014-01-22 · TA获得超过292个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:129万
展开全部

方法一:

安个iotop

以ubuntu为例: 

安装 root@ubuntu:~# apt-get install iotop 

安装完成后 执行iotop 就可以看到类似top一样的显示 

按进程显示IO各项指标

PS:内核需要升级到 >=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, 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()

ace_fei
推荐于2016-03-08 · TA获得超过2013个赞
知道小有建树答主
回答量:734
采纳率:100%
帮助的人:717万
展开全部
lsof 是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

常用的参数列表
lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yisu_02eb0
2014-01-22 · TA获得超过734个赞
知道小有建树答主
回答量:458
采纳率:0%
帮助的人:220万
展开全部
终端里面执行 iostat
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
QICHUAN_ZHANG
2014-01-22 · TA获得超过199个赞
知道小有建树答主
回答量:1646
采纳率:0%
帮助的人:548万
展开全部
可以的, 用命令过滤出来就找到了, 发私信过来吧, 看看什么问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式