調查用戶空間程序某函數最常調用路徑

 

原創文章,轉載請註明: 轉載自Erlang非業餘研究

在做系統調優或者調查性能問題的的時候,比如說調查一個鎖的性能問題。 這把鎖的代碼會有很多路徑會調用, 我們可以在鎖的地方設個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\n", "STACK", "COUNT")
  foreach (stack in stacks_count- limit 20) {
    printf("%50s %10d\n", sprint_stackx(stack), stacks_count[stack])
  }
  delete stacks_count
}
probe timer.s(5) {
  print_top_stack ()
  printf("--------------------------------------------------------------\n")
}
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
--------------------------------------------------------------
...

哈效果不錯哦!

祝玩的開心。

發佈了49 篇原創文章 · 獲贊 10 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章