zoukankan      html  css  js  c++  java
  • 研究性能测试工具之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")
    }
    
  • 相关阅读:
    WINFrom Excal 数据导入数据库
    Asp.net MVC 中Ajax的使用 [分享]
    C#高级二
    C#高级一
    C#入门基础三四
    C#入门基础三
    C#入门基础二
    《Think in Java》(六)访问权限控制
    TCP/IP 详解笔记
    Win7使用之查端口,杀进程
  • 原文地址:https://www.cnblogs.com/jinyz/p/3047417.html
Copyright © 2011-2022 走看看