Activity Monitorは、どのような種類の「メッセージ」を「送信メッセージ数」列と「受信メッセージ数」列で追跡しますか。


9

OS XのActivity Monitorでは、プロセスリストビューに列を追加することができます。そのリストで利用可能な2つの列は "送信メッセージ"と "受信メッセージ"で、それぞれ "送信メッセージ"と "受信メッセージ"として表示されます。証人:

Portion of Activity Monitor window showing "Sent Msgs" and "Rcvd Msgs" columns

Activity Monitorがどのような「メッセージ」を参照していますか?

私が「メッセージ」を見たとき、私は最初にObjective-Cの「メッセージ」と一緒に発送されると思いました objc_msgSend()しかし、これらのメッセージの大部分はプロセス自体の内部にあるため、オペレーティングシステムによってそれらがどのように追跡されるのかわかりません。添付されたときにデバッガはそのような種類のメッセージを追跡するかもしれません、しかし私はOSがいつもそれをしているのを見ることができません - 非常に高いオーバーヘッド。

だから私はそれらがより重いメッセージであると思います。それらはプロセス間のRPCの形式ですか?それとも、それらのメッセージはユーザーランドからカーネルに呼び出されますか?決定的な参考文献を探しています。ありがとうございました。

回答:


7

これらの数はMachメッセージの入出力数と一致するので、それらをobjc_msgSendの数として解釈しないことは正しいと思われます。

あなたはインストゥルメントを起動することによってより高いレベルのメッセージ数についてもっと学ぶことができます(自由にダウンロード可能の一部) Xcodeツールセット )どのメッセージがいつ送信されているのかを確認するために特定のアプリケーションを詳しく調べます。

Xcode Instruments screen shot

ObjCに関連する割り当てだけでなく、すべての割り当てをフィルタリングすることができ、単なるメッセージ送信数よりもはるかに低いレベルの詳細を掘り下げることができます。 Xcodeの一部である標準的なドキュメントは、これらの統計とそれらがActivity Monitorとどのように関連するかを理解するのに役立ちます。

具体的には、 NSObjCMessageLoggingEnabled そして objc_msgSend 参照ドキュメントのMac OS X Debugging Magic - ツールガイドの一部で、objCの数を数えることができます。

検索する mach message Xcodeで、のIPC / Message Queuesセクションを探します。 カーネルプログラミングガイド machメッセージキューの詳細とそれらを構成するものについて。あなたが推測したように、それらははるかに低レベルのIPCカーネルトラフィックです。

あなたはおそらくdeveloper.apple.comでもそれを見つけることができますが、Xcodeの中からローカルにドキュメンテーションを持つことは多くの利点を持ちます。


1
ありがとう - しかし、それはまだ明確ではありません。私は3つのことを疑った。私が最初に疑ったことを確認するつもりでしたか。 objc_msgSend() 呼び出し あります すべてのプロセスを追跡したのか、それともより重いメッセージが推測したのでしょうか。
Chris W. Rea

1
それらはobjc_msgSendカウントだと思いましたが、今では私は間違っていると思います。これらは、Activity Monitor内からプロセスを選択したときに使用可能なmachメッセージ数に完全に対応しています。私は自分の答えをもっと正確で間違いが少なくなるように修正します。
bmike

ありがとうございます。 Kernel Programming Guideへのポインタは特に役に立ちます。気づいていませんでした。
Chris W. Rea

はい。すごく素晴らしいドキュメントがあります。developer.apple.comに掲載された方法と理由はわかっていますが、ドキュメントを閲覧するためにXcodeを使用すると、より効果的に使用できます。
bmike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.