zoukankan      html  css  js  c++  java
  • SystemTap知识(一)

    SystemTap是一个系统的跟踪探测工具。它能让用户来跟踪和研究计算机系统在底层的实现。

    安装SystemTap需要为你的系统内核安装-devel,-debuginfo,-debuginfo-common包

    使用下面的repo可以进行debuginfo的安装

    [debuggery]

    name=CentOS-$releasever - DebugInfo

    baseurl=http://debuginfo.centos.org/$releasever/$basearch/

    priority=1

    需要理解下面几个名词:

    instrumentation module -- 由SystemTap脚本编译的内核模块

    host system -- 你编译instrumentation 模块的机器

    target system -- 你运行instrumentation 模块的机器

    target kernel -- target system的内核模块

    你可以在一台机器上为其他机器编译trap模块,在目标机上只要安装systemtap-runtime,在宿主机上使用:

    stap -r kernel_version script -m module_name

    就能生成module_name.ko模块

    然后在目标机上运行staprun module_name.ko就可以执行这个trap

    stap命令参数:

    -v

    提供脚本运行的详细输出,可以使用多个的,比如stap -vv script.stp 输出的信息比stap -v script.stp多

    -o filename

    将输出存到文件filename中

    -S size,count

    限制输出的文件大小(兆byte算)和文件数目,多个文件会有后缀

    -x process ID

    这个processID能从脚本中的target()获取

    -c 'command'

    将target()函数做重命名

    -e 'script'

    使用script而不是文件作为输入

    -F

    使用Flight recorder mode(飞行记录模式),让脚本在后台运行。

    我们也可以使用 - 来将标准输入作为stap的输入

    echo "probe timer.s(1) {exit()}" | stap -

    SystemTap的飞行模式

    飞行模式使用-F参数控制的,它并不保存所有的输出,而是只保存最近一段时间的输出,保存的文件大小和文件数量是根据-S来控制的。

    飞行模式的监控是运行在后台的。

    安装出现问题:

    missing x86_64 kernel/module debuginfo

    根据这篇文章解决:http://dikar.iteye.com/blog/1477619

    SystemTap是如何工作的

    每个SystemTap脚本都会创建一个sesssion,这个session按照下面的执行顺序做操作:

    1 SystemTap使用tapset库检查这个脚本

    2 SystemTap将脚本翻译成C,然后在根据这个C程序生成一个内核模块。(在/tmp/xxxx/xxxx.ko)

    3 SystemTap加载这个模块,然后将代码挂载到探针probes(events 和handlers)中

    4 当事件发生的时候,相关的代码就执行了

    5 当session结束的时候,探针就被销毁

    SystemTap的事件可以被归类为两种类型:同步和异步

    同步事件包括:

    syscall.system_call

    vfs.file_operation

    kernel.function("function")

    kernel.trace("tracepoint")

    module("module").function("function")

    异步事件包括:

    begin

    end

    timer events

    printf

  • 相关阅读:
    网络基础
    模块和包的介绍与使用
    PHP 接口输出 图片
    Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the
    dedeCMS 两个站共用同一个数据库 图片路径统一
    写入文件_调试方法
    Mysql触发器 使用示例
    部署GitLab遇到的问题记录
    防火墙对nginx服务器有影响
    更新yum源并重建缓存
  • 原文地址:https://www.cnblogs.com/yjf512/p/3286429.html
Copyright © 2011-2022 走看看