Systemtap examples, Profiling - 6 Tracking System Call Volume Per Process
背景 例子来自syscalls_by_pid_procs.stp 脚本, 用以跟踪系统中所有的系统调用, 输出系统调用数前5的进程信息, 以及系统调用次数, 系统调用名. 在前面的例子中讲过按照系统调用次数排序输出, http://blog.163.com/digoal@126/blog/static/163...
背景 例子来自syscalls_by_pid_procs.stp 脚本, 用以跟踪系统中所有的系统调用, 输出系统调用数前5的进程信息, 以及系统调用次数, 系统调用名. 在前面的例子中讲过按照系统调用次数排序输出, http://blog.163.com/digoal@126/blog/static/163...
背景 例子来自topsys.stp 脚本, 上一篇的例子是选取一部分带来系统等待的系统调用作为事件, 输出等待事件排行前20的进程信息. 本文说的这个例子把所有的系统调用作为触发事件, 统计所有系统调用的调用次数, 输出前20位系统调用的名称和调用次数. 脚本内容以及注解 : [root@db-1...
背景 例子来自timeout.stp 脚本, 输出系统中指定的系统调用(poll, select, epoll, itimer, futex, nanosleep, signal)等待次数排行前20的进程以及各系统调用的等待次数的统计信息. 脚本内容以及注解 : [root@db-172-16-3-15...
背景 例子来自thread-times.stp 脚本, 该脚本通过对CPU时钟的跟踪, 使用user_mode()函数判断探针是否为用户模式触发的, 从而区分用户CPU开销还是内核CPU开销. 周期输出用户和系统CPU开销占比以及整个系统的cpu时钟周期统计. 比如我们想知道系统中那个进程最吃CPU资源, 是...
背景 例子来自para-callgraph.stp 脚本, 该脚本用以输出指定函数的call,return之间发生的所有函数调用情况, 类似在PostgreSQL plpgsql中输出call stack. 脚本内容以及注解 : [root@db-172-16-3-150 network]# cd /u...
背景 接下来开始对systemtap example的另一个分类Profiling做一些例子的讲解. 例子来自functioncallcount.stp 脚本, 该脚本通过函数的调用情况分析内核活动. 由于没有终止时间, 同时使用统计类型性能不如数组自增, 所以我做了相应的修改. (但是请注意数组以及全局标量...
背景 例子来自ioblktime.stp 脚本, 该脚本用以统计每个块设备的io块请求情况, 请求次数, io操作耗费的时间以systemtap的统计变量进程存储, 可以得到块设备上io块请求的平均时间, 总时间, 最大, 最小时间, 次数, 柱状图等等. 因为内核支持合并块操作, 所以通过ioblock.r...
背景 例子来自inodewatch2.stp 脚本, 该脚本用以监控指定文件的权限属性更改. 文件通过stat -c '%D %i' 取出DEV major, minor以及inode. 用法与上一片介绍的inodewatch.stp类似. 脚本内容以及注解 : [root@db-172-16...
背景 例子来自inodewatch.stp 脚本, 该脚本用以监控单个文件的读写, 需要使用vfs.read和vfs.write probe alias中的dev和ino变量对文件进行判断. dev是设备号, ino是文件的inode. dev和inode可以通过stat获得, 例如 [root@db...
背景 例子来自traceio2.stp 脚本, 该脚本使用vfs.write, vfs.read事件, 在handler中输出指定设备的读写情况, dev号可以从stat -c中获得. [root@db-172-16-3-150 oracle_fdw-0.9.9]# man stat STAT(1) ...