调查用户空间程序某函数最常调用路径
November 17th, 2010
12 comments
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: 调查用户空间程序某函数最常调用路径
在做系统调优或者调查性能问题的的时候,比如说调查一个锁的性能问题。 这把锁的代码会有很多路径会调用, 我们可以在锁的地方设个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 -------------------------------------------------------------- ...
哈效果不错哦!
祝玩的开心。
Post Footer automatically generated by wp-posturl plugin for wordpress.
Recent Comments