безудержный процесс

116

Иногда я вижу, как distnotedпроцесс внезапно ускоряется и жует 100% ЦП (на одно ядро) и тонну памяти, часто около 1,5 ГБ или около того. Это происходит несколько раз в день, начиная примерно месяц назад.

Командная строка /usr/sbin/distnoted agent, и она запущена launchd, ни одна из которых не очень помогает. Обычно он работает где-то между 4 и 24 часами, прежде чем он раскручивается и привязывает процессор.

Поиски в сети говорят, что distnotedуправляет доставкой уведомлений, и многие другие люди сообщают о той же проблеме с ним, но я еще не нашел решения. Некоторые люди считают, что закрытие приложения-виновника (например, Skype) останавливает его, но я еще не нашел виновника на своей машине. Обычно я запускаю только несколько приложений: Emacs (24.2 от Homebrew), Firefox, Adium и Dash.

Я на Mavericks в конце 2012 13 "Retina MBP. Заранее спасибо!

Обновить:

Я включил 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 либо падает, либо возвращается в нормальное состояние. Я не уверен, что это случайность (случалось только дважды), но если все это используют, возможно, в этом что-то есть.
я не бегу потоком, но возможно другие.
Райан
aquaemacs вызывает этот процесс на меня.
марафон
У меня была очень похожая проблема (возможно, та же самая проблема), и моя проблема ушла с обновлением ОС 10.9.4.
Крис Кнель
Заметил это сегодня. Виновником было приложение Google Drive для OS X (10.9) (1.17.7290.4094). Впервые я видел это.
jordanpg

Ответы:

24

Резюме от ОП : Это был отличный инструмент для отладки. Первоначально он указывал мне на то, что Spotlight переиндексирует файловую систему, но я сузил все, что разрешено индексировать, и все еще видел проблему. Я закончил тем, что установил работу cron, чтобы регулярно убивать distnoted. Смотри ответ дальше вниз.


Вы можете отлаживать distnoted путем создания файла. /var/log/do_dnserver_log Это заставляет CFNotificationCenterserver ( distnoted) записывать информацию обо всех уведомлениях в системный журнал.

Я бы начал там, перезагружался и смотрел системный журнал, когда процессор нагонял. Это должно легко выявить виновника.

Более подробную информацию об CFNotificationCenterотладке можно найти в официальных документах для разработчиков здесь: Техническое примечание TN2124> CFNotificationCenter

Temikus
источник
Спасибо! хороший звонок, я уже сделал это. я не вижу никаких записей о недооценке /var/log/system.log, но это также не ускорилось, так как я начал регистрацию. скрещенные пальцы.
Райан
сейчас я вижу разрозненные строки журнала, но они не слишком полезны. вздох. пример: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и посмотрите, какие системные вызовы действительно пытается сделать процесс, и если есть какие-либо сбойные (состояние не равно 0).
Темикус
Кроме того, что такое UID 89 в вашей системе? Меняется ли UID в уведомлениях? Pid 2644 соответствует distnoted или другому процессу?
Темикус
спасибо за идеи! Я знаком с strace, но я не знал о dtruss. Я обязательно попробую это в следующий раз. pids - это просто соответствующий процесс distnoted, и единственные uids - это я и _appserveradmпользователь встроенной системы, о котором я мало что знаю.
Райан
33

Я тоже это видел. Emacs 24.3.1, Mavericks 10.9.

Я обнаружил, что процесс distnoted успокаивается в течение нескольких секунд после выхода из Emacs.

Я подал ошибку Emacs здесь: http://permalink.gmane.org/gmane.emacs.bugs/80836

Дон тиллман
источник
2
Также видно с Emacs v23.4.1.
WilliamKF
1
Тоже самое. Никогда не думал, что это было вызвано Emacs! Спасибо
Лайонел Генри
1
Для меня возникла обратная проблема - Emacs начинает использовать весь процессор, и уничтожение моего пользователя с помощью функции distnoted временно устраняет проблему. В этом случае, глядя на процесс Emacs, я вижу много потоков - не созданных Emacs - все ожидают в очереди / мьютексе com.apple.root.default-overcommit-priority (run lldb, "process attach --pid") <pid> ", а затем" нить backtrace all ", чтобы увидеть их все)
jrg
и это интересное прочтение о том, чем на самом деле являются все эти потоки: newosxbook.com/articles/GCD.html (мое убийство с помощью distnoted может быть «волшебным пером», а не тем, что возвращает его к нормальному состоянию)
jrg
Также замечено с Emacs v24.5 на OS X 10.11.3
Майкл
23

Я знаю, что опаздываю на вечеринку, но это утечка памяти, характерная для Emacs Cocoa на Mavericks, которая исправлена ​​в стволе. На данный момент есть патч, который вы можете использовать для сборки emacs 24.3 только с исправлением.

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


user68323
источник
1
Я обновился до Elycs для Mac OS X (в марте) до ночной сборки и все еще имею проблему. Это происходит, если я создаю интерактивный сеанс для R или Clojure (языки программирования). Процесс distnoted медленно поднимется до ГБ ОЗУ и освободит его, как только я выйду из Emacs.
mattrepl
Та же проблема, что упоминал @mattrepl.
Амелио Васкес-Рейна
1
Доморощенный, кажется, интегрировал этот патч. Так что brew reinstall emacs --cocoa --with-gnutlsможет решить проблему тоже. Это также должно быть исправлено в 24.4, но это еще не достигло стабильной.
Мблакеле
Только что столкнулся с этой проблемой с Emacs 24.5 (исправление должно было быть в 24.4) .. в моем случае Emacs показывал вращающийся шар, а distnoted занимал почти 400% ЦП (за top), а убийство -9 emacs не работало, но после убийства -HUP разошелся, emacs отреагировал на убийство.
Майкл
17

У меня были те же проблемы с distnotedEl Capitan в течение некоторого времени. Мое решение не такое суровое, как его регулярное убийство, скорее я проверяю его выход из-под контроля (высокая загрузка ЦП), а затем убиваю его. Я использую этот скрипт:

#!/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) 
    }
    '

Скрипт запускается из cron каждую минуту с этой строкой в ​​crontab:

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

На практике сценарий убивает distnotedодин или два раза в день, и обычно это происходит после 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", чтобы сохранить файл и выйти из редактора.
микрофон
@ Майкл Рурк: Это отличное решение. Тем не менее, сценарий установки содержит синтаксические ошибки под встроенным bash моего Mac "GNU bash, версия 3.2.57 (1) -релиз (x86_64-apple-darwin15)". "||" логическая комбинация клавиш и «<< -» здесь не работают.
Каке
@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
Подход Майкла Рурка, приведенный ниже, - это очиститель прикосновений, поскольку он убивает лишенных внимания только тогда, когда он начинает есть процессор.
микрофон
@mike, но подход Майкла Рурка не касается случаев, когда disnotedесть оперативная память.
Кер
@ Cœur - Да. У меня не было проблемы с отключенной едой оперативной памяти. Это была проблема, которую вы видели?
Майк
1
@mike да, disnotedвчера я съел 63 ГБ оперативной памяти на моей High Sierra. Даже Райан, в своем вопросе, утверждает, что процесс жевал тонну памяти .
Cœur
@ Cœur - хорошая мысль! Я проголосовал за них.
Майк
4

Я делал разные комбинации для удаления настроек, чтобы сузить это поведение; Я думаю, что это режим коминтов. На 10.9 с emacs 24.3.1 из homebrew (или из emacsforosx) утечка distnoted + emacs (они оба медленно увеличивают потребление памяти) произойдет с одним открытым буфером режима оболочки. Не будет, если вы просто посетите файлы.

Просто хотел отметить это здесь, gmane, кажется, не работает, и я продолжаю находить эту дискуссию в моем дважды в неделю поиске продолжения этой проблемы.

Ланг Мартин
источник
Спасибо! Я мог бы видеть то же самое. я думал, что средний прожектор (принятый ответ) сработал для меня, но я все еще вижу сбежавших недооцененных в конце концов. Еще раз спасибо за лидерство, я могу следовать за этим и отлаживать больше.
Райан
Я считаю, что это что-то, что касается и моего Emacs-процесса. distnoted успокоился сразу после того, как я убил Emacs. У меня есть server.el, edit-server.el и оболочка python, работающая все время для записи.
Лестер Чунг
Видя то же самое! Emacs виноват!
Джастингордон
Я даже не знаю, что такое режим коминтов, и у меня иногда возникают проблемы с Emacs. Так что, возможно, не конкретный пакет виноват.
huyz
2

Я думаю, что могу вспомнить только 2 случая, когда distnoted стала бесполезной. В этом случае двое из них сидели на вершине списка процессоров, и один был более 400%. Это произошло вскоре после возвращения в офис и подключения пары внешних дисплеев - один из которых питается от USB - я предположил, что это может быть связано. Я больше ничего не делал, чтобы попытаться решить проблему, прежде чем вытащить USB-дисплей, который мгновенно вернул здравомыслие. И затем его подключение не привело к повторным проблемам.

Что доказывает что? Без понятия!

Я подключаю их сотни раз, и мне впервые пришло в голову, что это может быть связано. И поскольку это происходит не каждый раз, когда я их подключаю, это может быть связано с тем, что они слишком быстро подключаются друг к другу, или что-то в этом роде. Во всяком случае, я бы поделился, если другие люди обнаружат, что это связано с подключением периферийных устройств (если это внешний экран).

петеднз - фузион
источник
У меня была похожая ситуация. Когда я отсоединил мой USB-адаптер «перестал работать», он перестал загружать процессор (в соответствии с «верхом»), и когда я снова подключил его, проблема не возникла сразу же.
Дальбергия,
Это оказалось проблемой и для меня тоже. Спасибо!
Эрик Симонтон
2

Похоже, это происходит, когда приложение каким-то образом неправильно использует API уведомлений, предоставляемый macOS. В моем случае виновником был iTerm2. После его выхода distnotedпроцессы вышли. Другие выявленные виновники - это Emacs и iTunes.

xApple
источник
1
iTerm2 вызывает это и для меня.
ctc
0

Что бы это ни стоило, я смог решить эту проблему, отключив антивирусное программное обеспечение.

Дэвид П. Колдуэлл
источник
0

Это случилось и со мной, distnoted с ума сходила. После закрытия кучки приложений ничего не помогло.

Затем я заметил, что одно из диалогов «Сообщить в Apple» из сбойного процесса Python оставалось открытым всю ночь.

Хотя это могло быть просто совпадением, после закрытия диалога процесс с разделением на части успокоился.

Крис
источник
0

Я столкнулся с подобной проблемой с distnoted несколько месяцев назад и не мог отследить, почему загрузка ЦП достигла 100%. Наконец, killall distnotedкаждые две минуты я добавлял запись в свой crontab, что решало мою проблему.

Недавно у меня возникла проблема с Sublime Text, когда при наборе текста subl path/to/fileне удалось правильно открыть файл в Sublime Editor. Перезапуск приложения устранил проблему, но это быстро начало происходить снова.

После того, как я без конца ломал голову, я обнаружил тот факт, что каждые две минуты я убивал разобщенный процесс, и почему команда subl таинственным образом перестала работать.

Вывод: сверхвысокая загрузка ЦП могла быть связана с возвышенным. Теперь, когда Sublime обновился, надеюсь, мой вывод верен, загрузка ЦП остается низкой, и моя команда subl возвращается к работе, как и ожидалось, теперь, когда distnoted снова работает, и мой crontab не убивает процесс каждые 2 минуты.

finiteloop
источник
0

У меня тоже была эта проблема, довольно давно, но периодически. Очевидно, что distnoted является частью iTunes и также вызывает проблемы в Windows . Когда я убил iTunes (который проигрывал песню), distontedпроцесс, который использовал 400% моего процессора (у меня 4 ядра), перестал быть проблемой.

Поэтому мой ответ, пока я не узнаю лучше, - рекомендовать вам убить iTunes, а не distnotedсообщать нам, что происходит.

vy32
источник
-1

Я также вижу distnoted go haywire, в моем случае это похоже на fontd. У меня есть три запущенных дистрибутива, один для _spotlight, один для _distnote и один для моего пользователя.

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 потребляет процессор (30-90%), шрифтщик и fontd съедает по 30-60% процессора каждый. Как только я убиваю 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

Я понятия не имею, почему это происходит ...

Nils
источник
-2

Питер Бакли прав, я не прав. Я ненавижу, когда это происходит.

Не удаляйте distnoted, следующая загрузка будет совсем не веселой.

неправильно> я выбрал более кувалду
неправильно> 
неправильно> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
неправильно>
не так> Это рабочая машина, и я не заинтересован в синхронизации с iTunes.

ConorR
источник
Это безумие Как отмечается на странице Apple о distnoted , distnoted является частью OS X, имеет дело с распределенными уведомлениями и существует примерно с 2005 года.
jfmercer
Что бы вы ни делали, НЕ двигайтесь, distnotedкак упомянул ConorR (а позже исправили, спасибо!), Требуется загрузка OSX (10.9.5 в моем случае).
Питер Бакли
Несмотря на то, что это не совсем ответ, я думаю, важно, чтобы это было отмечено где-то на странице. Я почти подумывал о том, чтобы попытаться сделать это с помощью
Zenexer