zoukankan      html  css  js  c++  java
  • End-to-End Tracing of Ajax/Java Applications Using DTrace

    End-to-End Tracing of Ajax/Java Applications Using DTrace

    Category: Utility

    We posted about using DTrace to profile Firefox in the past, and

    today Amit Hurvitz published a piece on Ajax, DTrace and Where They Meet.

     
    JAVASCRIPT
     
    1. #!/usr/sbin/dtrace -Zs
    2.  
    3. #pragma D option quiet
    4. #pragma D option switchrate=10
    5.  
    6. dtrace:::BEGIN
    7. {
    8.         jsIndent = 0;
    9.         jsFile = "ajax-validation";
    10.         javaMethodBoundary= "doGet";
    11.         startTimestamp = timestamp;
    12. }
    13.  
    14. *mozilla$1:::js_function-entry
    15. /basename(copyinstr(arg0)) == jsFile/
    16. {
    17.         jsIndent += 2;
    18.         printf("%*s -> %s:%s (JavaScript)(elapsed ms: %d) ", jsIndent, "",
    19.             jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000);
    20. }
    21.  
    22. *mozilla$1:::js_function-return
    23. /basename(copyinstr(arg0)) == jsFile/
    24. {
    25.         printf("%*s < - %s:%s (JavaScript)(elapsed ms: %d) ", jsIndent, "",
    26.             jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000);
    27.         jsIndent -= 2;
    28. }
    29.  
    30.  
    31. hotspot$2:::method-entry
    32. {
    33.         self->strPtr = (char *)copyin(arg1, args[2]+1);
    34.         self->strPtr[(int)args[2]] = '';
    35.         self->classStr = (string)self->strPtr;
    36.         self->strPtr = (char *)copyin(arg3, (int)args[4]+1);
    37.         self->strPtr[(int)args[4]] = '';
    38.         self->methodStr = (string)self->strPtr;
    39. }
    40.  
    41. hotspot$2:::method-entry
    42. /javaMethodBoundary == self->methodStr/
    43. {
    44.         self->interested = 1;
    45.         self->indent = 0;
    46. }
    47.  
    48. hotspot$2:::method-entry
    49. /self->interested/
    50. {
    51.         self->indent += 2;
    52.         printf("%*s -> %s:%s (Java)(elapsed ms: %d) ", self->indent, "",
    53.             self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000);
    54. }
    55.  
    56. hotspot$2:::method-return
    57. {
    58.         self->strPtr = (char *)copyin(arg1, args[2]+1);
    59.         self->strPtr[(int)args[2]] = '';
    60.         self->classStr = (string)self->strPtr;
    61.         self->strPtr = (char *)copyin(arg3, (int)args[4]+1);
    62.         self->strPtr[(int)args[4]] = '';
    63.         self->methodStr = (string)self->strPtr;
    64. }
    65.  
    66. hotspot$2:::method-return
    67. /self->interested/
    68. {
    69.         printf("%*s < - %s:%s (Java)(elapsed ms: %d) ", self->indent, "",
    70.             self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000);
    71.         self->indent -= 2;
    72. }
    73.  
    74. hotspot$2:::method-return
    75. /javaMethodBoundary == self->methodStr/
    76. {
    77.         self->interested = 0;
    78.         /* exit(0); */
    79. }

    It then continues to show timings of methods and such. This may not be the simplest solution for debugging, but at least you can get inside the black box when you need too.

  • 相关阅读:
    python pandas库和stats库计算偏度和峰度(附程序)
    python matplot 字体配置-中文手绘漫画风格
    流密码
    信息安全和密码学基础知识
    剑指offer48-把字符串转换成整数
    剑指offer47-不用加减乘除做加法
    剑指offer46-求1+2+...+n
    剑指offer45-孩子们的游戏
    剑指offer44-扑克牌顺子
    剑指offer43-翻转单词顺序列
  • 原文地址:https://www.cnblogs.com/zengkefu/p/7502498.html
Copyright © 2011-2022 走看看