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

太乙 2009-12-08 11:43:59
...全文
1055 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
do_fork 2009-12-08
  • 打赏
  • 举报
回复
似乎IO ACCOUNTING必须 >= 2.6.20 内核才支持
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 do_fork 的回复:]
跟内核配置有关,CONFIG_TASK_IO_ACCOUNTING,


看内核源码 fs/proc/base.c 有没有下面这个函数了,
如果内核有,把TASK_IO_ACCOUNTING编译上就可以了,
如果内核没有,只能自己写个内核模块。

C/C++ code#ifdef CONFIG_TASK_IO_ACCOUNTINGstaticint do_io_accounting(struct task_struct*task,char*buffer,int whole)
{struct task_io_accounting acct= task->ioac;
unsignedlong flags;if (whole&& lock_task_sighand(task,&flags)) {struct task_struct*t= task;

task_io_accounting_add(&acct,&task->signal->ioac);
while_each_thread(task, t)
task_io_accounting_add(&acct,&t->ioac);

unlock_task_sighand(task,&flags);
}return sprintf(buffer,"rchar: %llu\n""wchar: %llu\n""syscr: %llu\n""syscw: %llu\n""read_bytes: %llu\n""write_bytes: %llu\n""cancelled_write_bytes: %llu\n",
(unsignedlonglong)acct.rchar,
(unsignedlonglong)acct.wchar,
(unsignedlonglong)acct.syscr,
(unsignedlonglong)acct.syscw,
(unsignedlonglong)acct.read_bytes,
(unsignedlonglong)acct.write_bytes,
(unsignedlonglong)acct.cancelled_write_bytes);
}
...............
[/Quote]有简单的方法么??编译内核是不可行的!
do_fork 2009-12-08
  • 打赏
  • 举报
回复
跟内核配置有关,CONFIG_TASK_IO_ACCOUNTING,


看内核源码 fs/proc/base.c 有没有下面这个函数了,
如果内核有,把TASK_IO_ACCOUNTING编译上就可以了,
如果内核没有,只能自己写个内核模块。

#ifdef CONFIG_TASK_IO_ACCOUNTING
static int do_io_accounting(struct task_struct *task, char *buffer, int whole)
{
struct task_io_accounting acct = task->ioac;
unsigned long flags;

if (whole && lock_task_sighand(task, &flags)) {
struct task_struct *t = task;

task_io_accounting_add(&acct, &task->signal->ioac);
while_each_thread(task, t)
task_io_accounting_add(&acct, &t->ioac);

unlock_task_sighand(task, &flags);
}
return sprintf(buffer,
"rchar: %llu\n"
"wchar: %llu\n"
"syscr: %llu\n"
"syscw: %llu\n"
"read_bytes: %llu\n"
"write_bytes: %llu\n"
"cancelled_write_bytes: %llu\n",
(unsigned long long)acct.rchar,
(unsigned long long)acct.wchar,
(unsigned long long)acct.syscr,
(unsigned long long)acct.syscw,
(unsigned long long)acct.read_bytes,
(unsigned long long)acct.write_bytes,
(unsigned long long)acct.cancelled_write_bytes);
}
...............
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 do_fork 的回复:]
引用 2 楼 hqin6 的回复:
引用 1 楼 do_fork 的回复:
/porc/$PID/io


没有这个文件……


你的内核版本是?

PHP code
root@sid:~# uname -aLinux sid2.6.31-1-686#1 SMP Sun Nov 15 20:39:33 UTC 2009 i686 GNU/Linux
root@sid:~# cat /proc/1/iorchar:16428807
wchar:8202326
syscr:27617
syscw:5263
read_bytes:32885248
write_bytes:3801088
cancelled_write_bytes:3670016
[/Quote]

嗯,我忘了贴我的机器配置了:

2.6.9-42.ELsmp
do_fork 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hqin6 的回复:]
引用 1 楼 do_fork 的回复:
/porc/$PID/io


没有这个文件……
[/Quote]

你的内核版本是?


root@sid:~# uname -a
Linux sid 2.6.31-1-686 #1 SMP Sun Nov 15 20:39:33 UTC 2009 i686 GNU/Linux

root@sid:~# cat /proc/1/io
rchar: 16428807
wchar: 8202326
syscr: 27617
syscw: 5263
read_bytes: 32885248
write_bytes: 3801088
cancelled_write_bytes: 3670016
太乙 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 do_fork 的回复:]
/porc/$PID/io
[/Quote]

没有这个文件……
do_fork 2009-12-08
  • 打赏
  • 举报
回复
/porc/$PID/io

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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