当前位置:七道奇文章资讯系统安全Linux安全
日期:2011-01-23 03:26:00  来源:本站整理

<b>监测Linux进程的及时IO情形</b>[Linux安全]

赞助商链接



  本文“<b>监测Linux进程的及时IO情形</b>[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

作为系统管理员和 VPS 服务商,常常会碰到服务器大概 VPS 磁盘 IO 繁忙的时刻,VPSee 普通城市用一些工具来检测,此中一个常用的工具就是自己写的 iotop 脚本,可以很便利看到哪个进程在频繁 IO. 上周五收到一位网友的邮件和留言,问到这篇文章:若何查看进程 IO 读写情形?里的 WRITE 为什么会呈现是 0 的情形,这是个好问题,VPSee 在这里好好注释一下.首先看看我们怎么样才能及时监测差别进程的 IO 活动情况.

block_dump

Linux 内核里供应了一个 block_dump 参数用来把 block 读写(WRITE/READ)情况 dump 到日记里,这样可以通过 dmesg 号令来查看,具体操作步骤是:

# sysctl vm.block_dump=1

or

# echo 1 >/proc/sys/vm/block_dump

然后便可以通过 dmesg 便可以察看到各个进程 IO 活动的情况了:

# dmesg -c

kjournald(542): WRITE block 222528 on dm-0

kjournald(542): WRITE block 222552 on dm-0

bash(18498): dirtied inode 5892488 (ld-linux-x86-64.so.2) on dm-0

bash(18498): dirtied inode 5892482 (ld-2.5.so) on dm-0

dmesg(18498): dirtied inode 11262038 (ld.so.cache) on dm-0

dmesg(18498): dirtied inode 5892496 (libc.so.6) on dm-0

dmesg(18498): dirtied inode 5892489 (libc-2.5.so) on dm-0

问题

一位细心的网友提到这样一个问题:为什么会有 WRITE block 0 的情形呈现呢?VPSee 跟踪了一段时间,发现确切有 WRITE 0 的情形呈现,比方:

# dmesg -c

...

pdflush(23123): WRITE block 0 on sdb1

pdflush(23123): WRITE block 16 on sdb1

pdflush(23123): WRITE block 104 on sdb1

pdflush(23123): WRITE block 40884480 on sdb1

...

答案

本来我们把 WRITE block 0,WRITE block 16, WRITE block 104 这里面包含的数字理解错了,这些数字不是代表写了多少 blocks,是代表写到哪个 block,为了探求本相,VPSee 追到 Linux 2.6.18 内核代码里,在 ll_rw_blk.c 里找到了答案:

$ vi linux-2.6.18/block/ll_rw_blk.c

void submit_bio(int rw, struct bio *bio)

{

int count = bio_sectors(bio);

BIO_BUG_ON(!bio->bi_size);

BIO_BUG_ON(!bio->bi_io_vec);

bio->bi_rw |= rw;

if (rw &WRITE)

count_vm_events(PGPGOUT, count);

else

count_vm_events(PGPGIN, count);

if (unlikely(block_dump)) {

char b[BDEVNAME_SIZE];

printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",

current->comm, current->pid,

(rw &WRITE) ? "WRITE" : "READ",

(unsigned long long)bio->bi_sector,

bdevname(bio->bi_bdev,b));

}

generic_make_request(bio);

}

很明显从上面代码可以看出 WRITE block 0 on sdb1,这里的 0 是 bio->bi_sector,是写到哪个 sector,不是 WRITE 了多少 blocks 的意思.还有,假如 block 设备被分成多个区的话,这个 bi_sector(sector number)是从这个分区开始计数,比方 block 0 on sdb1 就是 sdb1 分区上的第0个 sector 开始.   以上是“<b>监测Linux进程的及时IO情形</b>[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .