DTrace For Node

DTrace


DTrace是FreeBSD、NetBSD及MacOS上的一个动态跟踪工具,可以帮助我们诊断系统问题,
实时系统分析寻找出性能及其他问题,可以直接应用在生产环境中并且不构成任何危险。
支持对内核和用户程序进行动态追踪。

DTrace For Node


DTrace For Node说白了就是来追踪用NodeJS编写的程序,我们通过查看NodeJs的源代码
可以发现,NodeJS里面内嵌了一些probe(探测器),程序的源文件在(src/node.d,src/node_provider.d)
这里面,从这里我们可以发现NodeJS里面都提供了以下几个probes
    1) net-server-connection
    2) net-stream-end
    3) http-server-request
    4) http-server-response
    5) http-client-request
    6) http-client-response
    7) gc-start
    8) gc-end
所以从上面8个定义的探测器可以定义我们要探测的阶段,来寻找我们性能或者gc出现的问题
曾经我问过一个在Mac上使用DTrace的问题,这个问题对使用Mac的同学们应该有帮助(https://github.com/nodejs/node/issues/9501)

node-dtrace-provider


node-dtrace-provider是Native DTrace probes for node.js apps,也就是说是针对我们写的应用程序提供的探测包,由于是基于DTrace的所有操作系统所有有限制,
著名的restify(lib/dtrace.js)服务框架里面就是用node-dtrace-provider,有兴趣的可以看看都提供以下probes
    1) route-start
    2) handler-start
    3) handler-done
    4) route-done
    5) client-request
    6) client-response
    7) client-error

当然我们也可以自己去定义自己的probe,看node-dtrace-provider的用法即可

Linux


上面说了那么多,发现居然不支持Linux,是不是也太搓了啊,其实不用这样,Linux下用SystemTap
这个探测工具,和DTrace是一样的,NodeJS里面也内置了SystemTap的探测器,只不过对于NodeJS apps
还没有发现有使用SystemTap支持的package,不过应该也能使用SystemTap实现吧,还有一个好消息是
DTrace已经合并到了最新的Linux内核里,也就是说全平台支持的DTrace即将到来。

你可能感兴趣的:(DTrace For Node)