RHEL中基於OS來統計某程式使用的IO;

Steven1981發表於2011-11-23
今天在安裝和使用STAP時碰到一個問題。 # stap disktop.stp semantic error: libdwfl failure (missing x86_64 kernel/module debuginfo under '/lib/modules/2.6.18-164.11.1.el5/build'): No such file or directory while resolving probe point kernel.function("vfs_read").return[@more@]

semantic error: no match while resolving probe point vfs.read.return semantic error: no match while resolving probe point kernel.function("vfs_write").return semantic error: no match while resolving probe point vfs.write.return Pass 2: analysis failed. Try again with another '--vp 01' option 出現這個錯誤是因為沒有安裝kernel_debuginfo包; 找到KERNEL相關的包: kernel-debuginfo-`uname -r`.x86_64.rpm kernel-debuginfo-common-`uname -r`.x86_64.rpm

附上 stap檔案

=====================

######disk io
#!/usr/bin/env stap
#
# 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,io_stat1,device1
global read_bytes,write_bytes,read_bytes1,write_bytes1

probe vfs.read.return {
if ($return>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
if (devname == "N/A"){
io_stat1[pid(),execname(),uid(),ppid(),"R"] += $return
device1[pid(),execname(),uid(),ppid(),"R"] = devname
read_bytes1 += $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
}
if (devname=="N/A") {
io_stat1[pid(),execname(),uid(),ppid(),"w"] += $return
device1[pid(),execname(),uid(),ppid(),"w"] = devname
write_bytes1 += $return
}
}
}

probe timer.ms(5000) {
/* skip non-read/write disk */
if (read_bytes+write_bytes) {
printf("n%-25s, %-8s%4dKb/sec, %-7s%6dKb, %-7s%6dKbnn",ctime(gettimeofday_s()),"Raw Average:", ((read_bytes+write_bytes)/1024)/5,"Raw Read:",read_bytes/1024,"Raw Write:",write_bytes/1024)
printf("%8s %8s %8s %25s %8s %4s %12sn","UID","PID","PPID","CMD","DEVICE","T","BYTES")
foreach ([process,cmd,userid,parent,action] in io_stat- limit 10)
printf("%8d %8d %8d %25s %8s %4s %12dn",userid,process,parent,cmd,device[process,cmd,userid,parent,action],action,io_stat[process,cmd,userid,parent,action])
delete io_stat
delete device
read_bytes = 0
write_bytes = 0
}
if (read_bytes1+write_bytes1){
printf("n%-25s, %-8s%4dKb/sec, %-7s%6dKb, %-7s%6dKbnn",ctime(gettimeofday_s()),"Cach Average:", ((read_bytes+write_bytes)/1024)/5,"Cach Read:",read_bytes1/1024,"Cach Write:",write_bytes1/1024)
printf("%8s %8s %8s %25s %8s %4s %12sn","UID","PID","PPID","CMD","DEVICE","T","BYTES")
foreach ([process,cmd,userid,parent,action] in io_stat1- limit 10)
printf("%8d %8d %8d %25s %8s %4s %12dn",userid,process,parent,cmd,device1[process,cmd,userid,parent,action],action,io_stat1[process,cmd,userid,parent,action])
delete io_stat1
delete device1
read_bytes1 = 0
write_bytes1 = 0
}
printf("n-------------------------------------------------------------------------------------------------n")
}
probe end{
delete io_stat
delete device
delete read_bytes
delete write_bytes
delete io_stat1
delete device1
delete read_bytes1
delete write_bytes1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/703656/viewspace-1056508/,如需轉載,請註明出處,否則將追究法律責任。

相關文章