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.

  • 相关阅读:
    sharepoint 2013 configure my site
    格式化xml
    斗罗大陆
    spring的beans.xml的配置
    jdom学习:读取xml文件
    java中加载xml文件方法
    struts2中IOC控制反转应用
    struts2.xml的配置与技巧
    struts2中的路径问题
    struts.xml详细配置
  • 原文地址:https://www.cnblogs.com/zengkefu/p/7502498.html
Copyright © 2011-2022 走看看