Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1509412
  • 博文数量: 228
  • 博客积分: 1698
  • 博客等级: 上尉
  • 技术积分: 3241
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-24 21:49
个人简介

Linux

文章分类

全部博文(228)

文章存档

2017年(1)

2016年(43)

2015年(102)

2014年(44)

2013年(5)

2012年(30)

2011年(3)

分类: LINUX

2016-11-29 23:43:05

转自:http://blog.yufeng.info/archives/847

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


点击(此处)折叠或打开

  1. $ cat > dig.stp
  2. global stacks_count
  3.  
  4. probe process(@1).function(@2)
  5. {
  6.  stacks_count[ubacktrace()]++;
  7. }
  8.  
  9. function sprint_stackx(stack)
  10. {
  11. addr = tokenize(stack, " ");
  12. while(addr != "")
  13. {
  14.         fun= symname(strtol(addr, 16));
  15.         s = fun . "->" . s;
  16.         addr = tokenize("", " ");
  17. }
  18. return s;
  19. }
  20.  
  21. function print_top_stack () {
  22.   printf ("%50s %10s\n", "STACK", "COUNT")
  23.   foreach (stack in stacks_count- limit 20) {
  24.     printf("%50s %10d\n", sprint_stackx(stack), stacks_count[stack])
  25.   }
  26.   delete stacks_count
  27. }
  28.  
  29. probe timer.s(5) {
  30.   print_top_stack ()
  31.   printf("--------------------------------------------------------------\n")
  32. }
  33.  
  34. CTRL+D
  35.  
  36. #我们用nmon这个程序来试验下吧
  37. #脚本的使用方法是: stap dig.stp prog funcs
  38. #注意这个程序需要-g编译, 才能有符号信息
  39.  
  40. #在另外一个控制台下运行nmon, 打开磁盘,CPU监控等。
  41. $nmon
  42.  
  43. $ sudo stap dig.stp nmon proc_*
  44.                                              STACK COUNT
  45.                                  main->proc_read-> 2
  46.                                   main->proc_cpu-> 2
  47.                                  main->proc_read-> 2
  48.                                   main->proc_mem-> 2
  49.                  main->proc_mem->proc_mem_search-> 2
  50.                  main->proc_mem->proc_mem_search-> 2
  51.                  main->proc_mem->proc_mem_search-> 2
  52.                  main->proc_mem->proc_mem_search-> 2
  53.                  main->proc_mem->proc_mem_search-> 2
  54.                  main->proc_mem->proc_mem_search-> 2
  55.                  main->proc_mem->proc_mem_search-> 2
  56.                  main->proc_mem->proc_mem_search-> 2
  57.                  main->proc_mem->proc_mem_search-> 2
  58.                  main->proc_mem->proc_mem_search-> 2
  59.                  main->proc_mem->proc_mem_search-> 2
  60.                  main->proc_mem->proc_mem_search-> 2
  61.                  main->proc_mem->proc_mem_search-> 2
  62.                  main->proc_mem->proc_mem_search-> 2
  63.                  main->proc_mem->proc_mem_search-> 2
  64.                  main->proc_mem->proc_mem_search-> 2
  65. --------------------------------------------------------------
  66. ...
阅读(5601) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~