问题标签 [dtrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
453 浏览

c++ - 从 C 程序访问 dtrace 探针

有 runocc.d dtrace 脚本,它打印每个处理器的运行队列。我需要在 Mac OS X 上的 C++ 程序中获取运行队列长度。是否有可能以某种方式将 dtrace 构造嵌入到 C++ 程序中?

0 投票
1 回答
902 浏览

node.js - 将节点 js restify 应用程序部署到 heroku 时出错

我在将 restify 应用程序部署到 Heroku 时遇到问题。

似乎 Heroku 的 dtrace 有问题,restify 使用了它,虽然不需要,但我读过你可以通过从 restify 的 package.json 文件中删除 dtrace 来绕过这个问题,但是我尝试过这个但没有成功.

我是 node 新手并使用 Heroku 和 git,所以我确定我缺少一些东西,restify 的 package.json 文件包含以下内容:

我已经删除了这些行,但在提交 git 并推送到 Heroku 后仍然收到与上述相同的错误消息。

谁能看到我错过了什么?

0 投票
2 回答
1902 浏览

macos - 使用命令行工具确定是什么阻止了 OSX 上的进程?

标题说得最多,真的。在 Linux 上,使用or可能很容易,并且在从 OSX Leopard 中删除之前,它曾经在 OSX 上很容易,以及底层系统调用(afaik)。stracelsof/proctruss

显而易见的方法是用 来解决这个问题dtrace,但据我所知dtrace,它不会这样做,因为它会在事件发生时捕获它们 - 在我的情况下,阻塞系统调用已经开始。顺便说一句,如果这可以解决,我很乐意纠正dtrace

我看到 Xcode 的 Instruments 有一个监视器,它通过定期对进程堆栈进行采样来实现类似的功能(不确定它依赖于什么系统调用来做到这一点!),也许命令行上的类似功能就足够了(因为它会显示堆栈一直到包装系统调用的库调用)。为了对我的用例有用,这个“采样命令行工具”必须找到并解析它在堆栈上找到的参数,以便确定我们阻止了哪个文件/文件描述符。

最后一件事 - 在 Linux 上,您通常可以作为普通用户执行此操作(假设没有ptrace_scope技巧)。如果 OSX 解决方案也不需要 root,那就太好了。

0 投票
3 回答
7344 浏览

javascript - 在 Linux 中分析 Node.JS(代码)执行时间

我正在寻找一种方法来精确Node.JS 分析Linux 上的脚本执行时间。

有一些有趣的项目,比如NodeTime.com 性能分析器,但它分析的是 I/O httprequests 的时间等等,而不是代码行的执行时间

我正在寻找一种方法来确定我可以在哪里优化我的 Javascript,大部分时间都花在哪里等等。


我见过的一种有趣的方法是尝试使用 DTrace 创建一个 FlameGraph来分析 Node.JS。

但是,dtrace它是非常特定于 Solaris 的。

  • 对于 Linux (Debian/Ubuntu),dtrace可以在sytemtap-sdt-dev包中找到。但是,stap dtrace不一样,并且缺少所有相关的钩子/探针。
  • Paul Fox 从 Unix 版本做了一个移植。它的功能更完整,但不知何故,钩子/探针在用户空间中不能像 Solaris 那样工作,也不能用于分析节点。
    ftp://crisp.dyndns-server.com/pub/release/website/dtrace/(构建起来非常容易,请参阅自述文件。)
  • 还有一个Oracle端口,但没有人会推荐它。显然,它只有大约 0.1% 的探测器来自 Paul Fox 端口。(具有讽刺意味的是,因为Oracle以前是for 的Sun原作者)dtraceSolaris

在 Linux 中,如何使用终端或 Eclipse 来分析我的 Node.JS 脚本的代码?我正在寻找特定的东西,比如 Zend Profiler 显示 PHP 脚本代码中每个命令的执行时间。

0 投票
2 回答
2528 浏览

linux - 了解 dtruss 的输出

谁能指出我如何理解/解释 dtruss (mac) 或 dtrace 输出的报告的参考?

我只是在一个简单的程序上尝试了 dtruss。例如,我得到以下输出:

我可以看到所有这些系统调用都采用十六进制参数。但是我应该如何解码这些?例如,如何找出它实际上试图打开的文件?

0 投票
1 回答
275 浏览

c - 使用 dtrace 计算一段时间内平均和最大磁盘读/写队列的示例

我需要在 Mac OSX 上读取磁盘队列长度(分别用于读取和写入操作)。我已经得出结论,这可能只能通过 dtrace 来完成(我很乐意在这里犯错,但是我没有找到任何不同的方法)。提供此信息的唯一方法是打开 dtrace 脚本。我需要能够在我的 C 程序中访问它提供的信息(或者更确切地说能够实现它的逻辑)。作为整个 dtrace 业务,libdtrace 的使用非常神秘(考虑到私有 API)。有没有什么例子(除了我发现的一些没有回答我的问题 - libdtrace 缓冲输出http://www.osdevcon.org/2008/files/osdevcon2008-petr.pdf)可以帮助我吗?

0 投票
2 回答
1569 浏览

gcc - dtrace: 编译脚本失败 找不到预处理器

我正在尝试从 oracle 测试此脚本以在 Ubuntu 10.04 上获取活动的 NFS 客户端,但我无法让它运行。

为此,我首先按照这些说明安装了 dtrace 。这正是我所做的:

但是,我在编译时收到此警告:

我已经安装了libdw-devand binutils-dev,但是看一下makefile,它似乎在寻找libdwarf.so,并且libdw在我的系统上被命名为libdw.so.

为了规避这一点,我创建了一个符号链接ln -s /usr/lib/libdw.so /usr/lib/libdwarf.so。这样做之后,编译失败。

所以,让我们撤消它。我删除了符号链接,再次编译,运行make installmake load希望一切正常。一切似乎都很好。

但是,然后我尝试运行上面提到的脚本,但它失败了:

我不知道发生了什么。我已经安装了 gcc,以防万一。

0 投票
3 回答
5424 浏览

macos - 解释 dtruss 输出,如“psynch_cvwait(...) = -1 Err#316”

dtrussstrace似乎是一个有用的工具来分析 OS X 上应用程序的(错误)行为。我在 linux 上找到了我心爱的人。但是解释它的输出需要理解它所引用的系统调用,有时还需要理解它们可能产生的错误条件。以这条线为例

我对一个文档源感兴趣,它可以让我找出这个系统调用的目的,它的参数意味着什么,以及这个错误代码代表什么。就像我对 libc 函数手册页所期望的一样。我要求提供描述上述和类似系统调用的参考,以及上述和类似的错误。因此,只需以该行作为我希望能够理解的输出类型的示例。

什么是合适的参考文档来了解像这样的 OS X 系统调用?

您的参考资料涵盖的系统调用越多越好。

0 投票
1 回答
299 浏览

aggregation - DTrace 不打印聚合

我正在尝试从 OS X 10.8 的终端执行以下非常简单的 DTrace 使用。

sudo dtrace -n 'syscall:::entry { @counts["System Call Entry"] = count(); }'

当我点击 ^CI 时,期望打印出聚合@counts,但我只是打印出一个空白行。有人可以告诉我为什么没有打印聚合吗?

这真的很奇怪,因为如果我执行以下脚本,我确实会看到聚合的打印输出,因此聚合中确实存储了值。

sudo dtrace -n 'syscall:::entry { @counts[probefunc] = count(); } tick-1sec { printa(@counts); exit(0); }'

0 投票
1 回答
587 浏览

python - Python Dtrace 已修补,但运行测试脚本时仍然出现“无效的探针说明符”

我用Issue 13405修补了 Python 2.7.3 ,然后用--with-dtraceconfigure 选项编译了 python 。

当我运行 test_dtrace 脚本时,测试失败并出现错误:

无效的探测说明符

如下所示: