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.

  • 相关阅读:
    Parse Notification for IOS
    微信回调:Activity 调用 finish()之后,该acitivity的实例并不为空
    Android Studio 使用微博SDK Demo的问题总结
    Android Activity切换动画
    分享那些坑
    TextColor java 代码
    奇怪的Bug: 点击事件穿透应用,激活桌面的另一个应用
    FragmentStatePagerAdapter VS FragmentPagerAdatper
    android:fillViewport="true"
    用两种方式获取Bitmap的不同结果
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5567633.html
Copyright © 2011-2022 走看看