IT技术博客大学习 共学习 共进步

disktop per设备per应用层面的IO读写统计

Erlang非业余研究 2011-05-17 08:46:38 浏览 2,821 次

    我们在调优IO 密集型的应用是通常需要知道IO的使用情况. 但是iostat只能知道系统全局的,iotop只能知道每个应用的, 我们有时候需要细化到每个应用对每个设备的使用情况. 比如说mysql数据库我们通常把日志和数据分开到不同的设备, 那我们需要知道数据读写多少,日志读写多少,分开的了解.

    目前还没有工具能够很轻松的了解. 幸运的是systemtap自己带的disktop可以帮我们做到,位于/usr/share/doc/systemtap/examples/io/disktop.stp.

    我们先来配置下环境:

$ uname -r
2.6.18-164.el5
$ rpm -i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm
$ rpm -i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm
$stap -V
Systemtap translator/driver (version 1.5 /0.137 commit release-1.4-144-gdce37b5 + changes)
Copyright (C) 2005-2011 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
enabled features: AVAHI LIBRPM LIBSQLITE3 NSS BOOST_SHARED_PTR TR1_UNORDERED_MAP NLS

    这样就好了.

     我们接着看如何使用:

$mount
/dev/sda11 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda6 on /tmp type ext3 (rw)
/dev/sda5 on /home type ext3 (rw)
/dev/sda3 on /usr type ext3 (rw)
/dev/sda2 on /var type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /u01 type ext3 (rw,noatime,nodiratime,barrier=0)

$sudo stap /usr/share/doc/systemtap/examples/io/disktop.stp

Mon May 16 05:39:20 2011 , Average:4054Kb/sec, Read:    2219Kb, Write:  18051Kb

     UID      PID     PPID                       CMD   DEVICE    T        BYTES
     502     8914     8639                    mysqld     sdb1    W     18366678
     502     8914     8639                    mysqld    sda11    R      2020497
   50672    24711     9796                     mysql     sda5    W       117430
     502    24748    30385                     mysql    sda11    R        47895
     502    24752    30385                     mysql    sda11    R        47895
     502    24756    30385                     mysql    sda11    R        47895
     502    24760    30385                     mysql    sda11    R        47895
     502    24747    24745                      grep     sda3    R         4528
     502    24751    24749                      grep     sda3    R         4528
     502    24755    24753                      grep     sda3    R         4528

...

    很简单的把,每5秒打印出使用IO最多的10个进程,有需要的话可以自己改下脚本.

建议继续学习

  1. vim几个小技巧(批量替换,列编辑) (阅读 37,262)
  2. 关于IO的同步,异步,阻塞,非阻塞 (阅读 16,422)
  3. ps - 按进程消耗内存多少排序 (阅读 12,522)
  4. find命令的一点注意事项 (阅读 11,681)
  5. 100个常用的linux命令 (阅读 11,442)
  6. 每个程序员都应该知道的8个Linux命令 (阅读 10,584)
  7. 最受欢迎的10个 Linux 单行命令 (阅读 10,002)
  8. Linux服务器性能评估 (阅读 9,882)
  9. Linux date 命令获取某日期的前一天 (阅读 9,722)
  10. ps 命令常见用法 (阅读 9,321)