zoukankan      html  css  js  c++  java
  • 调查用户空间程序某函数最常调用路径

    调查用户空间程序某函数最常调用路径

    原创文章,转载请注明: 转载自系统技术非业余研究

    本文链接地址: 调查用户空间程序某函数最常调用路径

    在做系统调优或者调查性能问题的的时候,比如说调查一个锁的性能问题。 这把锁的代码会有很多路径会调用, 我们可以在锁的地方设个probe点,但是我们无法知道那个路径是最经常调用的。 所以我就写了个stap脚本来解决这个问题,代码在RHEL 5.4/6下都调试没有问题的。

    cat  dig.stp
    global stacks_count
     
    probe process(@1).function(@2)
    {
     stacks_count[ubacktrace()]++;
    }
     
    function sprint_stackx(stack)
    {
    addr = tokenize(stack, " ");
    while(addr != "")
    {
            fun= symname(strtol(addr, 16));
            s = fun . "->" . s;
            addr = tokenize(""" ");
    }
    return s;
    }
     
    function print_top_stack () {
      printf ("%50s %10s ""STACK""COUNT")
      foreach (stack in stacks_count- limit 20) {
        printf("%50s %10d ", sprint_stackx(stack), stacks_count[stack])
      }
      delete stacks_count
    }
     
    probe timer.s(5) {
      print_top_stack ()
      printf("-------------------------------------------------------------- ")
    }
     
    CTRL+D
     
    #我们用nmon这个程序来试验下吧
    #脚本的使用方法是: stap dig.stp prog funcs
    #注意这个程序需要-g编译, 才能有符号信息
     
    #在另外一个控制台下运行nmon, 打开磁盘,CPU监控等。
    $nmon
     
    sudo stap dig.stp nmon proc_*
                                                 STACK      COUNT
                                     main->proc_read->          2
                                      main->proc_cpu->          2
                                     main->proc_read->          2
                                      main->proc_mem->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
                     main->proc_mem->proc_mem_search->          2
    --------------------------------------------------------------
    ...

    哈效果不错哦!

    祝玩的开心。

    Post Footer automatically generated by wp-posturl plugin for wordpress.

  • 相关阅读:
    如何在Element 使用正则表达式校验
    Vs Code 微信小程序 神兵利器合集
    分享CSS公共类库(能在项目快捷使用CSS类)
    Element+Axios上传图片 OR 文件
    两种简洁的数组对象去重姿势
    VScode 格式化代码保存时使用ESlint修复代码
    如何在linux上部署vue项目
    Vue 2.x 3.x 配置项目开发环境跟线上环境
    在Vue文件中引入外部URL链接
    博客目录
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5567633.html
Copyright © 2011-2022 走看看