`
xieyj
  • 浏览: 102779 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

systemtap监控磁盘操作

 
阅读更多

       怎么在linux系统下面找到,对磁盘操作最多的进程,systemtap自带的例子disktop.stp,就能实现这个功能,在doc/systemtap/examples/io目录里面,运行一下看看stap -v disktop.stp,显示如下       

       由上图可以看出最繁忙的进程和磁盘了,贴一下代码,------后面为我写的备注

 

# Copyright (C) 2007 Oracle Corp.

#

# Get the status of reading/writing disk every 5 seconds,

# output top ten entries 

#

# This is free software,GNU General Public License (GPL);

# either version 2, or (at your option) any later version.

#

# Usage:

#  ./disktop.stp

#

 

global io_stat,device

global read_bytes,write_bytes

 

probe vfs.read.return {

  if ($return>0) { ----vfs_read返回的为读取的字节书,这边表示读取的字节书大于0

    if (devname!="N/A") {/*skip read from cache*/

      io_stat[pid(),execname(),uid(),ppid(),"R"] += $return  -----累计每个进程读取的字节数

      device[pid(),execname(),uid(),ppid(),"R"] = devname

      read_bytes += $return    ------总的读取字节数

    }

  }

}

 

probe vfs.write.return {

  if ($return>0) {  

    if (devname!="N/A") { /*skip update cache*/

      io_stat[pid(),execname(),uid(),ppid(),"W"] += $return

      device[pid(),execname(),uid(),ppid(),"W"] = devname

      write_bytes += $return

    }

  }

}

 

probe timer.ms(5000) {  ----每5000ms操作一次

  /* skip non-read/write disk */

  if (read_bytes+write_bytes) {

 

    printf("\n%-25s, %-8s%4dKb/sec, %-7s%6dKb, %-7s%6dKb\n\n",

           ctime(gettimeofday_s()),

           "Average:", ((read_bytes+write_bytes)/1024)/5,

           "Read:",read_bytes/1024,

           "Write:",write_bytes/1024)

 

    /* print header */

    printf("%8s %8s %8s %25s %8s %4s %12s\n",

           "UID","PID","PPID","CMD","DEVICE","T","BYTES")

  }

  /* print top ten I/O */

  foreach ([process,cmd,userid,parent,action] in io_stat- limit 10) -----iostat-表示降序排序,limit表示取前10

    printf("%8d %8d %8d %25s %8s %4s %12d\n",

           userid,process,parent,cmd,

           device[process,cmd,userid,parent,action],

           action,io_stat[process,cmd,userid,parent,action])

 

  /* clear data */

  delete io_stat

  delete device

  read_bytes = 0

  write_bytes = 0  

}

 

probe end{

  delete io_stat

  delete device

  delete read_bytes

  delete write_bytes

}

   有个疑问,上面的devname值从何而来,看一下tapset/vfs.stp,里面有一段

probe vfs.read.return = kernel.function("vfs_read").return

{

name = "vfs.read"

retstr = sprintf("%d", $return)

 

file = $file   ---vfs_read传入的参数

pos = $pos  ---vfs_read传入的参数

buf = $buf    ---vfs_read传入的参数

bytes_to_read = $count  ---vfs_read传入的参数

dev = __file_dev($file)

devname = __find_bdevname(dev, __file_bdev($file))

ino = __file_ino($file)

 

ret = $return

bytes_read = $return > 0 ? $return : 0

error = $return < 0 ? $return : 0

error_str = error ? errno_str(error) : ""

}

    vfs_read函数原型ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) 

    其实用stap -L 'kernel.function("vfs_read")就会把参数和返回值都列出来    


     这么简单的代码就把一个复杂的监控给实现了,systemtap真神器!

 

  • 大小: 34.9 KB
  • 大小: 7.7 KB
分享到:
评论

相关推荐

    使用动态跟踪技术SystemTap监控Oracle和mysql性能——吕海波@美创科技.zip

    例如,监控Oracle的I/O操作可能需要挂钩到与磁盘读写相关的内核函数,而监控MySQL的连接状态则可能涉及网络通信相关的系统调用。 5. **数据收集与分析**:收集到的数据通常需要进一步处理和分析。例如,使用 ...

    SystemTap_Beginners_Guide.pdf

    《SystemTap初学者指南》是一份详尽的手册,旨在向用户介绍如何使用SystemTap监控Red Hat Enterprise Linux 5中的各种子系统。该指南适合那些具备RHCT(Red Hat Certified Technician)认证水平或者在Red Hat ...

    基于SystemTap的Linux服务器性能分析系统的设计与实现.pdf

    例如,用户可以设置对特定进程的CPU使用率、磁盘I/O操作、网络流量等进行监控,并指定监测的时间段。这样,用户可以根据自己的需求定制性能分析,提高了系统的灵活性。 该系统具有高精度的性能分析能力,能够提供...

    systemtap

    - **性能分析**:通过追踪系统调用、内存分配、磁盘I/O等,Systemtap 可以帮助识别系统瓶颈和性能问题。 - **错误检测**:当系统出现异常或错误时,Systemtap 能够捕捉关键事件,帮助定位问题源头。 - **日志和...

    SystemTap GUI-开源

    3. **数据收集**:SystemTap GUI可以启动和管理数据收集过程,监控系统性能指标,如CPU利用率、内存使用情况、磁盘I/O、网络流量等。用户可以选择性地记录特定事件,以便后续分析。 4. **结果可视化**:收集到的...

    trafficserver-systemtap-toolkit:交通服务器的 systemtap 工具包

    3. **资源监控**:监控内存使用、CPU占用,以及磁盘I/O等关键资源,确保服务器健康稳定运行。 4. **日志增强**:系统级的日志记录可能不足以满足所有需求,SystemTap可以扩展日志功能,记录特定的事件或操作,以供...

    基于linux的自主可控操作系统word版.doc.pdf

    操作系统的监控特性非常全面,能够实时监控内存、CPU、网络、IO、进程、文件系统、交换分区等系统资源,以及硬件信息,如磁盘、RAID1、FC控制器和内存MCE异常。监控框架具有高度的可扩展性,允许用户自定义监控脚本...

    Linux软件性能分析与优化.pdf

    SystemTap是一种强大的工具,它允许开发者无需修改内核源代码就能实时监控和分析Linux系统的运行状态。SystemTap基于Kprobe机制,能够动态插入探针到运行中的内核,收集关于系统行为的数据。这些数据包括但不限于...

    常用系统调优工具1

    5. **iotop**:类似top命令,但针对I/O操作,可以追踪进程的磁盘读写活动,帮助定位I/O密集型问题。 6. **blktrace**:磁盘I/O跟踪工具,记录每个设备的详细I/O事件,对于分析存储子系统的性能非常有用。 7. **...

    IT运维工程师的23个细节进阶.doc

    - Bootstrapping:如使用Kickstart或Cobbler自动化安装操作系统。 - 配置管理工具:Capistrano、Chef、Puppet、Func、SaltStack、Ansible和Rundeck用于自动化部署和配置更新。 2. **监控系统**: - 网络监控:...

    藏经阁-云平台性能优化-七牛-李玮.pdf

    3. 移动厂商和机型的优化:包括移动厂商和机型的多样性、操作系统高度定制、网络复杂、信号变化等。 4. PC用户端硬件配置的优化:包括PC用户端硬件配置、系统环境干扰、接入网复杂等。 5. 产品逻辑和用户行为的优化...

    最新IT-运维工程师的23个细节-进阶.docx

    3. 性能监控:dstat、atop、nmon、slabtop、sar、sysdig、tcpdump、iftop、iperf、smem和collectl这些工具分别用于不同层面的性能监控,如CPU、内存、网络、磁盘I/O等,帮助识别系统瓶颈。 4. APM(Application ...

    IT-运维工程师的23个细节-进阶.pdf

    8. **存储与数据库**:fio、iozone、IOMeter用于磁盘压力测试,Memcache使用Mcrouter进行扩展,Redis可配合Dynomite、Twemproxy或Codis/SSDB/Aerospike进行分布式管理。MySQL监控有mytop、orzdba等工具,Percona ...

    最新IT-运维工程师的23个细节-进阶.pdf

    12. **存储与性能测试**:fio、iozone、IOMeter测试磁盘性能,Memcache的Mrouter、Redis的Dynomite和Twemproxy、Codis/SSDB/Aerospike优化数据库分发。 13. **MySQL监控与管理**:mytop、orzdba、Percona Toolkit、...

    IT-运维工程师的23个细节-进阶.docx

    13. **Memcached扩展**: Mcrouter用于分布式Memcached操作,而Dynomite、Twemproxy和Codis/SSDB/Aerospike提供Memcached和Redis的扩展解决方案。 14. **MySQL监控**: 包括mytop、orzdba、Percona Toolkit、Maatkit...

    高级服务器设计和实现(架构、手段与工具箱)_PPT.pdf

    操作系统微调,如使用SystemTap进行动态分析,协议栈和内存子系统的调整,以及进程流水线设计,如Cgi、Fastcgi和Ajp13,都能显著提升服务器效率。 最后,内存数据库如Extremedb、Memcached和mnesia可以提供高速的...

    IT运维工程师的23个细节进阶.docx

    13. **故障排查与性能优化**: 系统性能分析工具如Systemtap和Sysdig有助于定位问题,Percona's TPCC-MYSQL Tool用于数据库性能基准测试。 以上只是IT运维工程师23个细节进阶中的部分要点,实际工作中还需要结合具体...

    IT-运维工程师的23个细节-进阶.doc.pdf

    - Bootstrapping技术如Kickstart和Cobbler可以帮助自动安装操作系统,提高效率。 - 软件构建工具如rpmbuild用于构建RPM软件包,简化分发和更新过程。 2. **虚拟化与云计算**: - Xen和KVM是流行的开源虚拟化平台...

Global site tag (gtag.js) - Google Analytics