• 研究性能测试工具之systemtap入门指南(三)


    Stap 程序是SystemTap 工具的前端,它接受使用脚本语言编写的探测指令(probing instructions) ,翻译成C 代码,并将C 代码编译成内核模块,接着将模块加载到内核,最后内核执行脚本里请求的系统跟踪和探测函数。你可从标准输入或命令行参数向stap 提供脚本文件。程序运行直至用户中断,或者遇到大量的软件错误,或者脚本自动调用exit() 函数。
    tap 命令完成下述的工作:

    翻译脚本
    生成C 代码并编译成内核模块
    加载模块到内核,输出到stap 的stdout
    CTRL-C 卸载内核模块和终止stap
    关于stap 命令的所有选项列表,请参阅stap(1) 的用户手册。

    下面代码示例演示了SystemTap 探针使用。
    [root@BL480-64 ~]#vi test_dir.stp
    probe kernel.function("sys_mkdir").call { printf ("mkdir enter\n") }
    probe kernel.function("sys_mkdir").return { printf ("mkdir exit\n") }
    保存退出。
    [root@BL480-64 ~]#stap test_dir.stp
    重新打开一个会话窗口:
    [root@BL480-64 ~]#mkdir test1
    运行输出:
    mkdir enter
    mkdir exit
    从脚本中能体现,在系统命令mkdir的入口和出口添加两个探针,只要执行mkdir命令,就会调用两个探针函数。

    实际应用SystemTap脚本
    1、通过监控脚本(linuxsysperl)或系统命令(top、vmstat、iostat等)检查系统状态
    如果出现系统资源使用过多,进入分析流程,使用find命令举例:find / -name sys*。

    2、使用topexe.stp脚本,列出linux系统5秒钟20个系统调用最高的应用
    脚本如下:

    [root@BL480-64 jinyz]# more topexe.stp 
    #! /usr/bin/env stap
    #
    # This script continuously lists the top 20 systemcalls in the interval 
    # 5 seconds
    #
    
    global syscalls_count
    
    probe syscall.* {
      syscalls_count[execname()]++
    }
    
    function print_systop () {
      printf ("%25s %10s\n", "SYSCALL", "COUNT")
      foreach (syscall in syscalls_count- limit 20) {
        printf("%25s %10d\n", syscall, syscalls_count[syscall])
      }
      delete syscalls_count
    }
    
    probe timer.s(5) {
      print_systop ()
      printf("--------------------------------------------------------------\n")
    }
    
  • 相关阅读:
    svg使用
    人生是 立体, 不是平面, 股票大作手不太好的结局
    react 管理平台
    首页性能优化
    vue 安装插件
    python中如何对list之间求交集,并集和差集
    Java中String直接复制和new String创建对象的区别以及equals和==的区别和效率对比
    关于二叉树的总结
    Postgresql 数据库,如何进行数据备份以及导入到另外的数据库
    Java List详解,面试中应该如何解答关于List的问题
  • 原文地址:https://www.cnblogs.com/jinyz/p/3047417.html
Copyright © 2020-2023  润新知