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.

  • 相关阅读:
    如何批量查看容器内部的进程?
    如何一键将k8s中configmap以及secret的配置变成本地环境变量
    如何快速批量下载m3u8(ts)视频?
    如何快速搜索?
    【待学习】知识点/小类
    【待学习】科目/大类
    总览:SpringCloud基础结构
    AES 加密解密
    JVM学习:方法重载的优先级
    反射操作数组---反序列化小知识
  • 原文地址:https://www.cnblogs.com/zengkefu/p/7502498.html
Copyright © 2011-2022 走看看