dtrace 影响,监控进程 (OS X)?

Posted

技术标签:

【中文标题】dtrace 影响,监控进程 (OS X)?【英文标题】:dtrace impact, monitoring processes (OS X)? 【发布时间】:2015-01-06 08:13:33 【问题描述】:

我正在尝试找到一种有效的方法来从用户模式以编程方式监控我的计算机(OS X Yosemite)上启动了哪些进程。由于NSWorkspaceDidLaunchApplicationNotification 仅适用于应用程序,kqueues (NOTE_EXIT) 仅允许监视特定进程,因此 dtrace 探测器似乎是要走的路。我玩过/usr/bin/execsnoop/usr/bin/newproc.d (以及精简版本,只安装一个探针(syscall::posix_spawn:return)并且什么都不做(例如没有打印))。

这些可以很好地为我提供我需要的信息,但是当我启动一个启动多个进程/快速执行多个命令的应用程序(例如 VMWare Fusion)时 - 探针似乎明显影响系统。具体来说,kernel_task CPU 使用率在几秒钟内持续飙升至 50% 以上,并且操作系统 UI(鼠标等)明显变慢/滞后...如果未安装 dtrace 探测器,则永远不会观察到此行为。

所以有几个问题: 1)有什么方法可以避免这个性能问题? (dtrace #pragmas?) 2) dtrace 探测是累积的吗? (如果我安装了 dtrace 探针,我需要手动卸载它们,还是 ctl+C 清除/禁用它们?) 3) 有什么方法可以查看当前安装了哪些 dtrace 探针?

我不喜欢使用 dtrace - 但我不知道另一种(非轮询)方法来获取在 OS X 上启动的事物的 pid/进程名称:/

【问题讨论】:

【参考方案1】:

    我非常惊讶地看到在启用单个探测器后产生了可衡量的影响;甚至

    dtrace -n syscall::posix_spawn:return

    造成问题?如果是这样,您是否内存不足? DTrace 确实需要(默认情况下)适度的数量,并且它的初始化可能会将您推到边缘。除了 Fusion,您是否发现其他任何问题?它似乎在 Yosemite 上遇到了自身的性能问题。

    探针在消费者之间共享。如果只有一个正在运行的消费者(例如 dtrace),那么所有 DTrace 探针将在它退出时被删除。如果两个消费者启用了同一个探测,那么它将保持活动状态,直到最后一个消费者退出。

    也许吧。有权访问 OS X 源代码的人可以修改 this script。

【讨论】:

tx 供您回复! 1. 是的,完全同意。只运行你的 sn-p 并看到相同的行为(kernel_taskspike/非常滞后的 UI),只要执行大量进程/shell 命令(Fusion exec 在启动期间执行大约 50 个!)。在循环中执行lsps 的python 脚本具有相同的行为-再次,但在dtrac'ing 时始终如一。我的内存还不错 - 16GB? 2.有道理。 3.酷,会看看。好的,这是有趣的部分,dtrace 探测:dtrace -n syscall::exe*:return 减少了kernel_task 峰值,并且不再有 UI 延迟!奇怪...

以上是关于dtrace 影响,监控进程 (OS X)?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 DTrace 隐藏 OS X 应用程序?

如何在 Mac OS X 上构建 DTrace?

是否可以在 Mac OS X 上通知 DTrace 动态生成的代码?

如何在 Mac OS X Leopard 上的 dtrace 中使用热点探针?

无法在 Mac OS X 上通过 jinfo 启用 DTrace 探测

Mac OS X 上是不是有 dtrace ustack() 助手?