暴走したプロセス


116

ときどき、distnotedプロセスが突然スピンアップし、100%CPU(1つのコア上)と1トンのメモリ(多くの場合1.5G程度)を噛みます。これは、1か月ほど前に1日に数回発生します。

コマンドラインは/usr/sbin/distnoted agentであり、で開始されていますがlaunchd、どちらもあまり役に立ちません。通常、4時間から24時間の間に実行されてから、スピンアップしてCPUをペグします。

Web検索ではdistnoted通知の配信を管理しており、他の多くの人が同じ問題を報告していますが、まだ修正方法が見つかりません。一部の人々は、犯人アプリケーション(たとえば、Skype)を閉じると停止することに気づきましたが、私のマシンで犯人をまだ見つけていません。通常、Emacs(Homebrewの24.2)、Firefox、Adium、およびDashという少数のアプリのみを実行しています。

私は2012年後半の13 "Retina MBPでMavericksにいます。よろしくお願いします!

更新:

distnotedタッチしてシステムログへのログ記録を有効にしましたが、/var/log/do_dnserver_logあまり役に立ちません。次のような行が表示されます(uid 501は私、89はまだ見つかりません):

distnoted[80011]: # distnote server agent  absolute time: 48754.144787848   civil time: Wed Nov 20 10:52:03 2013   pid: 80011 uid: 501  root: no
distnoted[20]: # distnote server daemon  absolute time: 2.808112262   civil time: Tue Nov 19 09:52:24 2013   pid: 20 uid: 0  root: yes
distnoted[444]: # distnote server agent  absolute time: 16.656997509   civil time: Tue Nov 19 09:52:38 2013   pid: 444 uid: 501  root: no
distnoted[1271]: # distnote server agent  absolute time: 52.518265717   civil time: Tue Nov 19 09:53:14 2013   pid: 1271 uid: 89  root: no
distnoted[689]: Interruption - exiting now.

またsudo dtruss -p PID、スピンアップdistnotedプロセスを実行しましたが、次のような行が出力されます。

kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
...

ここで釣りをしますが、変化があったとしても、みなさんは流動的ですか?私にとって、それらは関連しているようです。emacsが凶暴になったときに流動をやめると、emacsはクラッシュするか、通常に戻ります。これがまぐれかどうかはわかりませんが(2回しか発生しません)、誰もがそれを実行している場合は、何かがあるかもしれません。

私はフラックスを実行していませんが、他の人はそうかもしれません。
ライアン

aquaemacsを使用すると、このプロセスが気になります。
マラソン14年

私は非常によく似た問題(おそらく同じ問題)を抱えていましたが、私の問題は10.9.4 OSアップデートでなくなりました。
クリスクエネル14

今日これに気づいた。原因はOS X(10.9)Googleドライブアプリ(1.17.7290.4094)でした。初めて見ました。
ヨルダンプ14

回答:


24

OPからの要約:これはデバッグに最適なツールでした。もともとは、Spotlightがファイルシステムのインデックスを再作成することを示していましたが、インデックスを作成できるものを絞り込みましたが、まだ問題が見つかりました。私は定期的にdistnotedを殺すためにcronジョブを設定することになりました。さらに下の回答を参照してください。


ファイルを作成することにより、distnotedをデバッグできます。/var/log/do_dnserver_log これにより、CFNotificationCenterサーバー(distnoted)がすべての通知に関する情報をシステムログに記録します。

そこで起動し、再起動して、CPUが急上昇したときにシステムログを確認します。これは犯人を簡単に排除するはずです。

CFNotificationCenterデバッグの詳細については、公式の開発者向けドキュメントをご覧ください:テクニカルノートTN2124> CFNotificationCenter


ありがとう!良い電話、私は今やった。にdistnotedエントリ/var/log/system.logは表示されませんが、ロギングを開始してからスピンアップしていません。成功を祈っている。
ライアン

現在、distnotedログ行が表示されていますが、あまり有用ではありません。はぁ。例:Nov 23 07:56:15 hell.local distnoted[2644]: # distnote server agent absolute time: 77.445654904 civil time: Sat Nov 23 07:56:15 2013 pid: 2644 uid: 89 root: no
ライアン

DTraceスクリプトをそのプロセスにアタッチし、実際に何をするsudo dtruss -p PIDかを確認し、プロセスが実際に実行しようとするsyscallsを確認し、失敗したものがあるかどうかを確認します(ステータスが0でない)。
テミクス

また、システムのUID 89は何ですか?通知のUIDは変更されますか?pid 2644は、distnotedまたは別のプロセスに対応していますか?
テミクス

アイデアをありがとう!私はよくstrace知っていdtrussますが、知りませんでした。次回は絶対にやってみます。pidは対応する分散プロセスであり、唯一のuidはmeと_appserveradm、組み込みシステムユーザーであり、私はあまり知りません。
ライアン

33

私もこれを見ました。Emacs 24.3.1、マーベリックス10.9。

Emacsを終了した後、数秒以内に分散プロセスが落ち着くことがわかりました。

Emacsのバグをここに提出しました:http : //permalink.gmane.org/gmane.emacs.bugs/80836


2
Emacs v23.4.1でも見られます。
WilliamKF 14年

1
こっちも一緒。Emacsが原因だとは想像もしていませんでした ありがとう
ライオネル・ヘンリー14年

1
私にとって、私は逆の問題を抱えていました-EmacsはすべてのCPUを使用し始め、ユーザーの分散を殺すと一時的に問題が解消されます。この場合、Emacsプロセスを見ると、多くのスレッド(Emacs以外のスレッド)がすべてcom.apple.root.default-overcommit-priority queue / mutexで待機しています(lldbを実行し、 "process attach --pid <PID>」、そして『それらすべてを参照するには、スレッドのバックトレースのすべて』)
JRG

そして、これはこれらのスレッドが実際に何であるかについての興味深い読み物です:newosxbook.com/articles/GCD.html(私の殺したdistnotedは「魔法の羽」であり、通常に戻すものではないかもしれません)
jrg

また、OS X 10.11.3上のEmacs v24.5で見られる
マイケル・

23

私はパーティーに遅れていることは知っていますが、これはMavericksのCocoa emacs固有のメモリリークであり、トランクで修正されています。今のところ、修正だけでemacs 24.3をビルドするために使用できるパッチがあります。

https://gist.github.com/anonymous/8553178



1
Mac OS X用Emacs(3月)からのナイトリービルドに更新しましたが、まだ問題があります。RまたはClojure(プログラミング言語)の対話型セッションを作成すると発生するようです。distnotedプロセスはGBのRAMにゆっくりと上昇し、Emacsを終了するとすぐに解放されます。
mattrepl

@mattreplが言及したのと同じ問題。
アメリオバスケスレイナ14年

1
Homebrewはこのパッチを統合しているようです。したがってbrew reinstall emacs --cocoa --with-gnutls、問題も解決する可能性があります。また、24.4で修正される予定ですが、まだ安定していません。
mblakele

Emacs 24.5でこの問題を経験しました(修正は24.4にあるはずでした)..私の場合、Emacsは回転するボールを表示しており、distnotedはほぼ400%CPU(per top)を使用し、-9 emacsを殺すことは機能しませんでしたが、 -HUPを殺した後、emacsは殺害に応答しました。
マイケル

17

私はdistnotedエルキャピタンで同じ問題をしばらく抱えてきました。私の解決策は、定期的に殺すほど厳しくはなく、制御不能状態(CPU使用率が高い状態)になっていることを確認してから殺します。このスクリプトを使用します。

#!/bin/sh
#
# check for runaway distnoted, kill if necessary
#
PATH=/bin:/usr/bin
export PATH

ps -reo '%cpu,uid,pid,command' | 
    awk -v UID=$UID '
    /distnoted agent$/ && $1 > 100.0 && $2 == UID { 
        system("kill -9 " $3) 
    }
    '

スクリプトは、crontabの次の行で毎分cronから実行されます。

*   *  *   *  *   sh "$HOME/bin/checkdistnoted"

実際には、スクリプトはdistnoted1日に1〜2回強制終了しbackupdます。通常、これは開始後に発生します。

OS Xシェル(コマンドライン)の使用に慣れていない人のために、次のスクリプトはcheckdistnotedスクリプトとcrontabエントリの両方をインストールします。

#!/bin/sh
#
# install $HOME/bin/checkdistnoted
# setup crontab to run every minute
# 
# MWR Apr 2016
#

INSTALLCMD=bin/checkdistnoted
cd "$HOME"
[ ! -d bin ] && mkdir bin
[ -f $INSTALLCMD ] || {
    cat > $INSTALLCMD <<-"!!"
    #!/bin/sh
    #
    # check for runaway distnoted, kill if necessary
    #

    PATH=/bin:/usr/bin
    export PATH

    ps -reo '%cpu,uid,pid,command' | 
        awk -v UID=$UID '
        /distnoted agent$/ && $1 >= 100.0 && $2 == UID { 
            # kill distnoted agent with >= 100% CPU and owned by me
            system("kill -9 " $3) 
        }
        '
!!
    chmod +x $INSTALLCMD 
    echo installed $INSTALLCMD
}

INSTALLCRON="# check for runaway distnoted every minute:
* * * * * sh \"\$HOME/$INSTALLCMD\""
crontab -l | grep -q '$HOME'/$INSTALLCMD || {
    crontab -l > mycron
    echo "$INSTALLCRON" >> mycron
    crontab mycron
    rm mycron
    echo updated crontab
}

上記をinstall_checkdistnoted.shデスクトップに保存し、次に実行Applications/Utilities/Terminalして入力する必要があります:

cd Desktop
sh install_checkdistnoted.sh 

完全に機能する場合、各ステップの確認を印刷します。スクリプトは、既存のcheckdistnotedスクリプトまたはcrontabエントリを上書きしません。


2
ありがとうございました!気づかれないようにするが、制御不能になるとシャットダウンする素晴らしいソリューション。Unixyの物事のやり方に慣れていないかもしれない私のような他の人々のために:1)。ホームフォルダーにはbinディレクトリがなく、ユーザー名の下にbinフォルダーを作成し、そこに「checkdisnoted」という名前のテキストファイルとしてスクリプトを配置します。2)。cronエントリを作成するには、ターミナルで「crontab -e」を実行し、「i」キーを押して挿入モードに入り、行全体にアスタリスクを貼り付け、「esc」を押してコマンドモードに戻り、入力します「:wq」はファイルを保存し、エディターを終了します。
マイク

@Michael Rourke:これは素晴らしい解決策です。ただし、インストールスクリプトには、私のMacの組み込みbash「GNU bashバージョン3.2.57(1)-release(x86_64-apple-darwin15)」の下に構文エラーが含まれています。「||」論理ショートカットと「<<-」はここでは機能しないようです。
kakyo

@kakyo-非常に申し訳ありませんが、タブがスペースになったためスクリプトが失敗しました-修正されました。
マイケルローク

8

私はあきらめて、スレッジハンマーのアプローチを取りました:毎分自動的にそれを殺します。はぁ。

私はこれを入れます~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist

<plist version="1.0">
<dict>
  <key>Label</key>
  <string>org.snarfed.pkill_distnoted</string>
  <key>ProgramArguments</key>
  <array>
    <string>pkill</string>
    <string>-KILL</string>
    <string>-f</string>
    <string>distnoted</string>
  </array>
  <key>StartInterval</key>
  <integer>60</integer>  <!-- every minute -->
</dict>
</plist>

そして、でインストールしましたlaunchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist


1
以下のMichael Rourkeのアプローチはタッチクリーナーです。CPUを食べ始めたときに気づかない人を殺すだけです。
マイク

@mikeしかし、Michael Rourkeのアプローチdisnotedは、RAMを消費している場合には対応していません。
キュー

@Cœur-はい。RAMを食べることを意味する問題は発生していません。それはあなたが見た問題でしたか?
マイク

1
@マイクはい、disnoted昨日ハイシエラで63 GBのRAMを消費していました。ライアンでさえ、彼の質問で、このプロセスは大量の記憶を噛み砕いていと述べています。
キュー

@Cœur-良い点!私はそれらを支持しました。
マイク

4

この動作を絞り込むために、ストリッピングカスタマイズのさまざまな組み合わせを行っています。私はそれがcomintモードだと思います。homebrew(またはemacsforosx)からのemacs 24.3.1を使用した10.9では、シェルモードバッファーが1つ開いていると、distnoted + emacsリーク(どちらもメモリ消費が徐々に増加します)が発生します。単にファイルにアクセスするだけではそれはできません。

ここで注意したかったのは、gmaneがダウンしているように見えることと、この問題のフォローアップの週2回の検索でこの議論を見つけ続けることです。


ありがとう!私は実際に同じものを見ているかもしれません。私は去勢スポットライト(受け入れられた答え)が私のために働いていたと思ったが、結局私はまだ暴走の散文を目にしている。再びリードに感謝します、私はこれに従って、より多くのデバッグをするかもしれません。
ライアン

Emacsプロセスにも対処するものだと思います。私はEmacsを殺した直後に落ち着きました。server.el、edit-server.el、およびレコードのPythonシェルが常に実行されています。
レスターチャン

同じものを見る!非難するEmacs!
justingordon

私はcomintモードが何であるかさえ知りません、そして、時々emacsからdistnoted問題を持っています。したがって、特定のパッケージが原因ではない可能性があります。
huyz 14

2

distnotedが大騒ぎになったのは2回だけだと思います。この機会にCPUリストのトップに座っているのは2人で、1人は400%以上でした。それはオフィスに戻っていくつかの外部ディスプレイを接続した直後に起こりました-その1つはUSB電源です-私はそれが関連しているかもしれないと推測しました。USBディスプレイを引き出す前に問題を解決しようとすることは何もしませんでした。そして、それを再び差し込むと、繰り返し問題は発生しませんでした。

これは何を証明していますか?わからない!

私は何百回もそれらを接続します、そして、それがそれが関連しているかもしれないことが私に起こったのはこれが初めてです。そして、それをプラグインするたびに起こるわけではないので、それらを両方ともすぐにプラグインするか、またはそのようなランダムな何かをプラグインすることと関係があるかもしれません。とにかく、周辺機器の接続と関係があると他の人が感じた場合に共有すると思いました(それが外部画面である場合)


同様の状況がありました。USBディスプレイアダプタのプラグを抜いて、過剰なCPUの消費を停止(「トップ」による)し、再び差し込んだときに、問題がすぐに再発しませんでした。
ダルベルギア

これも私にとって問題であることが判明しました。ありがとうございました!
エリックサイモントン

2

これは、アプリケーションが何らかの方法でmacOSが提供する通知APIを誤って使用した場合に発生するようです。私の場合、犯人はiTerm2でした。終了後、distnotedプロセスは終了しました。特定された他の犯人はEmacsとiTunesです。


1
iTerm2は私にもそれを引き起こします。
ctc


0

これは私にも起こり、気が狂っていた。たくさんのアプリケーションを閉じた後、何も助けませんでした。

それから、クラッシュしたPythonプロセスからの「Appleへのレポート」ダイアログの1つが一晩中開いたままになっていることに気付きました。

偶然かもしれませんが、ダイアログを閉じた後、気づいたプロセスは落ち着きました。


0

数か月前にdistnotedで同様の問題に遭遇しましたが、CPU使用率が100%を超えている理由を追跡できませんでした。最後に、killall distnoted2分ごとにcrontabにエントリを追加して、問題を解決しました。

最近、私はSublime Textで問題subl path/to/fileが発生しており、入力ではSublime Editorでファイルを正しく開けませんでした。アプリを再起動すると問題は解決しましたが、すぐに再び発生し始めました。

頭を悩ませた後、sublコマンドが不可解に機能しなくなった理由を2分ごとに発見したプロセスを殺しているという事実を確認しました。

結論:超高CPU使用率は崇高に関連している可能性があります。崇高が更新されたので、うまくいけば私の結論は正しいです、CPU使用率は低いままであり、crontabが2分ごとにプロセスを殺すことなくdistnotedが再び実行されているので、sublコマンドは期待どおりに戻ります。


0

私もこの問題を抱えていました。かなり長い間、断続的に。どうやらdistnotedはiTunesの一部であり、Windowsでも同様に問題を引き起こしています。iTunes(曲を再生している)distontedを強制終了すると、CPUの400%(4コアを使用)を使用していたプロセスが問題になりなくなりました。

私の答えは、私がよく知るまで、iTunesではなくdistnoted、キルすることをお勧めし、何が起こるか教えてください。


-1

また、distnoted go haywireも見ます。私の場合は、fontdに関連しているようです。_spotlight用、_distnote用、ユーザー用の3つのdistnotedを実行しています。

distnoted   0,0 6:39,85 2   0   101 _distnote   0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit
distnoted   0,0 0,05    2   0   642 _spotlight  0 bytes 0 bytes     Yes     -   No  No  No  0 bytes 0 bytes 64 bit
distnoted   82,1    1:19:38,30  49  1   353 nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit

distnotedがCPU(30〜90%)を消費するたびに、fontworkerとfontdはそれぞれ約30〜60%のCPUを消費します。ユーザーのfontd、distnoted、fontworkerを強制終了するとすぐに落ち着きます。フォントワーカーを殺しても何もしません。fontdが再起動し、しばらく実行されていた数分後、すべてが再び起動します。

fontworker  27,2    52,81   4   1   1073    nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit
fontd   32,6    1:07,41 6   0   1072    nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit

私はこれがなぜ起こっているのか見当もつかない…


-2

ピーター・バックリーは正しいです、私は間違っています。それが起こるとき、私はそれを嫌います。

distnotedを削除しないでください。次のブートはまったく面白くないでしょう。

間違っている>私はより大胆なアプローチを取りました
間違っている> 
wrong> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
間違っている>
間違っている>これは仕事用のマシンで、iTunesとの同期には興味がありません。


それはナッツです。記載されたようdistnotedに関するAppleのページ distnoted、OS Xの一部である分散型の通知を扱うと、少なくとも2005年以来の周りされている
jfmercer

何をするにしても、distnotedConorRが述べたように(そして後で修正してくれてありがとう!)動かさないでください。OSXを起動する必要があります(私の場合は10.9.5)。
ピーターバックリー

これは実際には答えではありませんが、ページ上のどこかに注意しておくことが重要だと思います。私はほとんど気付かずに移動しようと考えていました。
ゼネクサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.