distnoted [日常のあれやこれや]
今日、僕が今の会社に持ち込んだiMacで真面目に仕事をしていた。Illustratorでちょっとした絵を描いているときに何かの拍子にビーチボールが回り出した。Dockは動いたので、起動している他のアプリに切り替えたけど、やっぱりビーチボールは回りっぱなしで何もできない。
ちょうどこないだ内臓HDDの代替セクタができたときも似たようなことがあったので、またかよ、と思った。前のときは特定の幾つかのファイル(おそらくヤバいセクタにデータがある)をアクセスしようとすると読み書きに異常に時間がかかるようになっていたらしいので、読み書きしてるプロセスを殺せば、とりあえずビーチボールは止まるはずなんだけど....
うんざりしながら、いつも持ち歩いている方のMacBookProからsshでログインした。ssh接続にもかなり時間がかかったので、ちょっとおかしいな、と思いながら
390%のときのスクリーショットを撮っとけばよかった、と思ったのは殺してしまった後だった。ちなみに、topではCPU1コアのタイムスライスが全部で100%と計算されて、4コアなら全部で400%になる。さっきのdistnotedはiMacのCore i5の4コアのほとんどを食いつぶしていた、ということになる。
distnotedというデーモンを知らなかったのでmanページを見たら
OS Xではdistnotedデーモンがユーザ空間と、自分自身(_distnoteユーザ)とspotlight用(_spotlightユーザ)の少なくとも3つが常に立ち上がっているようである。だいたい何をやっているのか想像はつく。
なんでこいつがCPU時間を食いつぶしたりするのかよくわからない。実装の最下層ではおそらくsocketを呼んでいるだろうと思われるけど、その実装はNSConnectionやNSProxyを使えばいいはずである。NSConnectionやNSProxyは他のアプリでもごく普通に使われるオブジェクトで、他のアプリが同時にハングしているわけではないので、distnotedは接続にこれらのオブジェクトを使っていないか、あるいはもっと上層の問題だということになる。socketの独自実装の問題なら実装がヘボいと言えるし、上層の問題なら明らかなバグだと言っていい。
よそ様で似たようなトラブルがないかググってみると、WindowsにiTunesをインストールした人が怒っているのが目立っている。Windows用のiTunesだけの問題ならWindows用の仮想Foundationフレームワークレイヤの実装がヘボだという可能性が高いけど、OS XやたまにiOSでも問題になっているようなので、distnoted本体の実装の問題だと考えられる。めったに発生しないけど起きるとユーザの目に付きやすいという、カッコ悪いのに潰しにくいバグである。
最近Appleのソフトウェア品質が低下している、という指摘をちらほら見かけるようになってきた。確かに僕の印象としても、PowerPC G3のキャッシュを使い倒していた時代のタイトなイメージからいつの間にか、Microsoft風の拡張主義の匂いがしていると思えるときがある。僕はAppleから給料をもらっているわけではないので、好きにすればいいと思うけど、Appleは実態としては(少なくとも僕の見方では)ソフトウェアがコアコンピテンスの会社なので、本当にソフトウェアの品質が低下しているなら、ほんの数年後にどうしようもなくヤバくなっているという可能性は十分ありえる。
OS Xがなくなるのは僕としては非常に困るけど。
ちょうどこないだ内臓HDDの代替セクタができたときも似たようなことがあったので、またかよ、と思った。前のときは特定の幾つかのファイル(おそらくヤバいセクタにデータがある)をアクセスしようとすると読み書きに異常に時間がかかるようになっていたらしいので、読み書きしてるプロセスを殺せば、とりあえずビーチボールは止まるはずなんだけど....
うんざりしながら、いつも持ち歩いている方のMacBookProからsshでログインした。ssh接続にもかなり時間がかかったので、ちょっとおかしいな、と思いながら
% top -o cpuを見た。これは単位時間ごと(今デフォルトでは1秒だっけ)にCPUの使用率でプロセスをソートして、その結果を単位時間ごとに表示更新する。それによるとなんとdistnotedというデーモンプロセスが390%以上食っていた。なんじゃこりゃあ、と思って即、殺したらすぐにビーチボールは止まった。
390%のときのスクリーショットを撮っとけばよかった、と思ったのは殺してしまった後だった。ちなみに、topではCPU1コアのタイムスライスが全部で100%と計算されて、4コアなら全部で400%になる。さっきのdistnotedはiMacのCore i5の4コアのほとんどを食いつぶしていた、ということになる。
distnotedというデーモンを知らなかったのでmanページを見たら
DISTNOTED(8) BSD System Manager's Manual DISTNOTED(8) NAME distnoted -- distributed notification server SYNOPSIS distnoted DESCRIPTION distnoted provides distributed notification services. There are no configuration options to distnoted. Users should not run distnoted manually. Mac OS X July 1, 2005 Mac OS X (END)と、これだけしかない。しかしこれを読むにおそらく、NSDistributedNotificationCenterの動作の本体だと思って間違いない。OS Xでは通知「NSNotification」をプロセス間でやりとりできる。distributedとあるのでネットワーク越しでも動くように思えるけど、「いずれ実装したい」という意思の表れ程度で、実態はローカルでしか動かない。OS Xの通知はオブジェクト間の結びつきがすごく緩くて、特定の局面ではめちゃ便利で、僕は多用しているが、プロセス間にはほとんど使わない。なぜならプロセス間では、緩い結びつきでは情報量が少なすぎて、共通の小さなオブジェクトを共有する方が簡単な場合が多いからである。
OS Xではdistnotedデーモンがユーザ空間と、自分自身(_distnoteユーザ)とspotlight用(_spotlightユーザ)の少なくとも3つが常に立ち上がっているようである。だいたい何をやっているのか想像はつく。
なんでこいつがCPU時間を食いつぶしたりするのかよくわからない。実装の最下層ではおそらくsocketを呼んでいるだろうと思われるけど、その実装はNSConnectionやNSProxyを使えばいいはずである。NSConnectionやNSProxyは他のアプリでもごく普通に使われるオブジェクトで、他のアプリが同時にハングしているわけではないので、distnotedは接続にこれらのオブジェクトを使っていないか、あるいはもっと上層の問題だということになる。socketの独自実装の問題なら実装がヘボいと言えるし、上層の問題なら明らかなバグだと言っていい。
よそ様で似たようなトラブルがないかググってみると、WindowsにiTunesをインストールした人が怒っているのが目立っている。Windows用のiTunesだけの問題ならWindows用の仮想Foundationフレームワークレイヤの実装がヘボだという可能性が高いけど、OS XやたまにiOSでも問題になっているようなので、distnoted本体の実装の問題だと考えられる。めったに発生しないけど起きるとユーザの目に付きやすいという、カッコ悪いのに潰しにくいバグである。
最近Appleのソフトウェア品質が低下している、という指摘をちらほら見かけるようになってきた。確かに僕の印象としても、PowerPC G3のキャッシュを使い倒していた時代のタイトなイメージからいつの間にか、Microsoft風の拡張主義の匂いがしていると思えるときがある。僕はAppleから給料をもらっているわけではないので、好きにすればいいと思うけど、Appleは実態としては(少なくとも僕の見方では)ソフトウェアがコアコンピテンスの会社なので、本当にソフトウェアの品質が低下しているなら、ほんの数年後にどうしようもなくヤバくなっているという可能性は十分ありえる。
OS Xがなくなるのは僕としては非常に困るけど。
2016-09-07 21:55
nice!(0)
コメント(1)
トラックバック(0)
同感です。バグがあっても直さない(または直す能力がない)ということが頻繁に見られますね。
“万が一”直してくれる可能性もあるので、バグレポートすることをお勧めします。
https://developer.apple.com/bug-reporting/
by katsura (2017-02-06 05:48)