怎么查看linux的哪个进程占用磁盘io较多?

太乙 2009-12-08 11:36:33
怎么查看linux的哪个进程占用磁盘io较多?

iotop没装(不考虑)
iopp不好使(没响应)
pid rchar wchar syscr syscw rkb wkb cwkb command
pid rchar wchar syscr syscw rkb wkb cwkb command
pid rchar wchar syscr syscw rkb wkb cwkb command

iostat不能查看哪个进程!!
...全文
7058 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2009-12-08
  • 打赏
  • 举报
回复
top命令,看CPU的占用率,一般IO是比较占CPU资源的。
playmud 2009-12-08
  • 打赏
  • 举报
回复
没有调用iotop,没有看iotop的代码,这个python脚本核心就是
echo 1 > /proc/sys/vm/block_dump

然后对生成的数据用python处理,你可以改成shell的。


[root@playmud ~]# python 1.py
TASK PID READ WRITE
kjournald 973 0 28
pdflush 90 0 0
kjournald 262 0 18
kjournald 973 0 28
kjournald 262 0 13
kjournald 971 0 5
[root@playmud ~]# uname -r
2.6.18.1
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 playmud 的回复:]
pythonPython code#!/usr/bin/python
# Monitoring per-process disk I/O activity
# written by http://www.vpsee.comimport sys, os, time, signal, reclass DiskIO:def__init__(self, pname=None, pid=None, read?-
[/Quote]

怎么使用??

我使用 chmod +x 或者python 都不行!!!
File "py.sh", line 8
def __init__(self, pname=None, pid=None, reads=0, writes=0):
^
IndentationError: expected an indented block
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 playmud 的回复:]
pythonPython code#!/usr/bin/python
# Monitoring per-process disk I/O activity
# written by http://www.vpsee.comimport sys, os, time, signal, reclass DiskIO:def__init__(self, pname=None, pid=None, read?-
[/Quote]

这个需要iotop,我这里没有这个命令(没装)

请看我的帖子内容,上面说了,iotop不考虑~~~
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 do_fork 的回复:]
/proc/$PID/io
[/Quote]

这个是不行的,没有这个东西~~~

我用的是linux 2.6.9-42.ELsmp
playmud 2009-12-08
  • 打赏
  • 举报
回复
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()
do_fork 2009-12-08
  • 打赏
  • 举报
回复
io不一定是磁盘io,这个很难区分
happybeginner 2009-12-08
  • 打赏
  • 举报
回复
/proc/进程号/stat下面不是有么?
好像vmstat也能显示io次数
do_fork 2009-12-08
  • 打赏
  • 举报
回复
/proc/$PID/io
hallowwar 2009-12-08
  • 打赏
  • 举报
回复
Mark。

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧