活动监视器在“已发送的邮件”和“已接收的邮件”列中跟踪哪种“邮件”?


9

在OS X上的活动监视器中,可以将其他列添加到进程列表视图。该列表中可用的两列是“已发送邮件”和“已接收邮件”,分别显示为“已发送邮件”和“ Rcvd邮件”。见证:

活动监视器窗口的一部分,其中显示“已发送邮件”和“ Rcvd邮件”列

活动监视器指的是哪种“消息”?

当我看到“消息”时,我首先想到的是用分发的Objective-C“消息” objc_msgSend(),但是我看不到操作系统将如何跟踪这些消息,因为大多数这些消息将在流程本身内部。附加时,调试器可能会跟踪这些类型的消息,但是我看不到操作系统一直都在运行-开销非常大。

所以我猜这些是重量级消息。它们是进程之间的RPC形式吗?或者,这些消息调用是从用户区域到内核的?寻求权威参考。谢谢。

Answers:


7

这些数字与Mach消息的输入/输出计数匹配,因此您似乎没有错误地将它们解释为objc_msgSend计数是正确的。

您可以通过启动Instruments(可免费下载的Xcode工具集)并挖掘特定的应用程序以查看发送什么消息以及何时发送消息,来了解更多有关更高级别消息计数的信息。

Xcode Instruments屏幕截图

它可以过滤所有分配以及与ObjC相关的分配,并且您可以挖掘比消息发送计数低得多的详细信息。Xcode的规范文档将帮助您理解这些统计信息以及它们与活动监视器的关系。

具体而言,搜索NSObjCMessageLoggingEnabledobjc_msgSend在Mac OS X调试魔法-工具的参考文档的指南部分来获得在objC计数。

mach message在Xcode中搜索,并在《内核编程指南》的“ IPC /消息队列”部分中查找有关mach消息队列的详细信息以及由它们组成的信息。如您所料,它们是IPC内核的低得多级别的流量。

您可能也可以在developer.apple.com上找到它,但是从Xcode本地获取文档有很多优点。


1
谢谢-尚不清楚。我怀疑三件事。您的意思是确认第一件事,我怀疑,即objc_msgSend()呼叫正在跟踪的所有进程,或者重量级的消息猜测?
克里斯·瑞

1
我以为是objc_msgSend计数,但是现在我发现我错了。当您从活动监视器中选择一个流程时,它们完美地映射到可用的马赫消息计数。我将修改我的答案,使其更正确,减少错误。
bmike

谢谢!指向《内核编程指南》的指针特别有用。没意识到。
克里斯·瑞

是的-有很多很棒的文档,即使我知道如何以及为什么将它放在developer.apple.com上,我在使用Xcode浏览文档时找到它并使用它的效率更高。
bmike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.