відвертий спотворений процес


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 або вийде з ладу, або повернеться до норми. Я не впевнений, чи це лукавство (траплялося лише двічі), але якщо всі запускають його, можливо, щось буде в цьому.

Я не біжу флюсом, але, можливо, інші є.
ryan

aquaemacs викликає цей процес на мене.
марафон

У мене була дуже схожа проблема (можливо, та сама проблема), і моя проблема пішла з оновленням ОС 10.9.4.
Кріс Квенелль

Помітив це сьогодні. Винуватецем став додаток Google X OS (10.9) (1.17.7290.4094). Перший раз я це бачив.
jordanpg

Відповіді:


24

Підсумок з ОП : Це був чудовий інструмент для налагодження. Первісно це вказувало мені на Spotlight, що переосмислює файлову систему, але я звузив речі, які дозволено індексувати, і я все-таки побачив проблему. Я закінчив налаштовувати роботу на крон, щоб регулярно вбивати ошелешених. Дивіться відповідь далі вниз.


Ви можете налагоджувати помилки, які не використовуються, створюючи файл. /var/log/do_dnserver_log Це змушує CFNotificationCenterсервер ( distnoted) записувати інформацію про всі сповіщення в системний журнал.

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

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


Дякую! гарний дзвінок, я зараз це зробив. Я не бачу жодних викривлених записів /var/log/system.log, але він також не розгорнувся з моменту початку журналу. схрещені пальці.
ryan

Зараз я бачу викривлені рядки журналів, але вони не надто корисні. зітхати. приклад: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
ryan

Спробуйте приєднати до цього процесу скрипт DTrace і подивіться, що він насправді робить, почніть з sudo dtruss -p PIDта подивіться, які систематичні виклики насправді намагається зробити цей процес, і чи є такі помилки (статус не 0).
Temikus

Також, що таке UID 89 у вашій системі? Чи змінюється UID у сповіщеннях? Чи відповідає pid 2644 спотвореному чи іншому процесу?
Temikus

дякую за ідеї! я знайомий strace, але я не знав про це dtruss. я обов'язково спробую це наступного разу. Під - це лише відповідний процес, що перемежовується, і єдині уіді - це я _appserveradm, вбудований користувач системи, про якого я не знаю багато про що.
ryan

33

Я теж це бачив. Emacs 24.3.1, Mavericks 10.9.

Я виявив, що спотворений процес заспокоюється протягом декількох секунд після того, як я вийшов з Emacs.

Я подав помилку Emacs тут: http://permalink.gmane.org/gmane.emacs.bugs/80836


2
Також спостерігається з Emacs v23.4.1.
WilliamKF

1
Те ж саме. Ніколи не уявляв, що це спричинено Emacs! Спасибі
Ліонель Генрі

1
Для мене у мене є зворотна проблема - Emacs починає використовувати весь процесор, і вбивство спотвореного мого користувача тимчасово усуває проблему. У цьому випадку, дивлячись на процес Emacs, я бачу безліч потоків - тих, що не походять з Emacs, - усі вони чекають на черзі / mutex com.apple.root.default-overcommit-пріоритет (запустити lldb, "приєднати процес --pid <pid> ", а потім" потік усіх назад ", щоб побачити їх усіх)
jrg

і це цікаве прочитання про те, що всі ці теми насправді є: newosxbook.com/articles/GCD.html (моє вбивство відверте може бути "магічним пером", а не тим, що приводить його в норму)
jrg

Також бачимо з Emacs v24.5 на OS X 10.11.3
Michael

23

Я знаю, що я спізнююсь на вечірку, але це витік пам’яті, характерний для какао-емаків на Mavericks, який закріплений у багажнику. На даний момент є виправлення, яке ви можете використовувати для створення emacs 24.3 за допомогою лише виправлення.

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



1
Я оновив до нічного побудови від Emacs для Mac OS X (у березні), і все ще є проблема. Схоже, це станеться, якщо я створять інтерактивний сеанс для R або Clojure (мови програмування). Спотворений процес повільно підніметься до ГБ оперативної пам’яті і звільнить його, як тільки я вийду з Emacs.
mattrepl

Та ж проблема, про яку згадував @mattrepl.
Амеліо Васкес-Рейна

1
Здається, що Homebrew інтегрував цей патч. Тож brew reinstall emacs --cocoa --with-gnutlsможе вирішити і проблему. Це також повинно бути зафіксовано в 24.4, але це ще не стало стабільним.
mblakele

Щойно відчула цю проблему з Emacs 24.5 (виправлення повинно було бути в 24.4). У моєму випадку Emacs показував обертову кульку і відверто брав майже 400% процесора (за top) і вбивав -9 emacs не працював, але після вбивства -HUP знехтувані emacs відповіли на вбивство.
Майкл

17

У мене були distnotedпевні проблеми з Ель-Капітаном вже деякий час. Моє рішення не таке суворе, як вбивство його регулярно, швидше я перевіряю, чи не закінчується воно (високе використання процесора), а потім його вбиваю. Я використовую цей сценарій:

#!/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сценарій або запис через кліт.


2
СПАСИБІ! Страхітливе рішення, яке дозволяє мені залишатись бездарним, але відключає його, коли воно виходить з-під контролю. Для інших людей, таких як я, які, можливо, не знайомі з Unixy способом поведінки: 1). у вашій домашній папці не буде каталогу bin, створіть папку bin під своїм іменем користувача та вставте скрипт туди як текстовий файл під назвою "checkdisnoted". 2). Щоб створити запис cron, запустіть "crontab -e" в терміналі, натисніть клавішу "i", щоб перейти в режим вставки, і вставте весь рядок зірочками, а потім натисніть "esc", щоб повернутися в командний режим, і введіть ": wq" для збереження файлу та виходу з редактора.
Майк

@Michael Rourke: Це чудове рішення. Однак сценарій встановлення містить синтаксичні помилки під вбудованим моїм Mac "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
Підхід Майкла Рурка внизу - це прибирання на дотик, оскільки воно лише вбиває недоброзичливців, коли він починає їсти процесор.
Майк

@mike, але підхід Майкла Рурка не стосується випадків, коли disnotedїсть оперативна пам'ять.
Cœur

@ Cœur - Так. У мене не виникло проблем із невмілим їжею оперативної пам’яті. Це була проблема, яку ви бачили?
Майк

1
@mike так, disnotedвчора їв 63 Гб оперативної пам’яті на моїй високій Сьєррі. Навіть Райан у своєму запитанні стверджує, що процес розжовував тонну пам’яті .
Cœur

@ Cœur - хороший момент! Я захищав їх.
Майк

4

Я робив різні комбінації зачистки налаштувань, щоб звузити таку поведінку; Я думаю, що це режим comint. 10.9 з emacs 24.3.1 від домашнього перекладу (або від emacsforosx) викривлене витік + emacs (вони обидва повільно збільшують споживання пам’яті) відбуватиметься з відкритим одним буфером режиму оболонки. Це не стане, якщо ви просто відвідуєте файли.

Просто хотів це зазначити, gmane, здається, не працює, і я продовжую знаходити цю дискусію під час мого два рази на тиждень пошуку подальших запитів на цю проблему.


Дякую! я насправді бачив те саме. Я подумав, що нітрохи прожектор (прийнята відповідь) спрацював для мене, але я все ще бачу, як зникли перешкоди. ще раз дякую за ведучий, я можу слідувати за цим і налагоджувати ще більше.
ryan

Я вважаю, що це теж має справу з моїм процесом Emacs. спотворений спокій заспокоївся відразу після того, як я вбив Emacs. У мене є сервер.el, edit-server.el та оболонка python, які завжди працюють для запису.
Лестер Чеун

Бачачи те саме! Емаки винні!
justingordon

Я навіть не знаю, що таке режим запуску, і часом у мене виникає відверта проблема від emacs. Тож, можливо, не винен жоден конкретний пакет.
хуйз

2

Я думаю, що я можу згадати лише 2 випадки, коли оскорблений пішов сірий. З цього приводу двоє з них сиділи на вершині списку процесорів, і один був понад 400%. Це сталося незабаром після повернення в офіс і підключення пари зовнішніх дисплеїв - один з яких працює на usb - я здогадався, що це може бути пов'язано. Я нічого не робив, щоб спробувати вирішити проблему перед тим, як витягнути USB-дисплей, який негайно повернув розум. А потім підключення його назад не призвело до повторних проблем.

Що доводить що? Не маю уявлення!

Я підключаю їх у сотні разів, і це мені вперше спало на думку, що це може бути пов’язано. А оскільки це не відбувається кожного разу, коли я підключаю їх, то це може мати щось спільне з підключенням їх обох занадто швидко один за одним, або щось подібне до випадкового. Як би я не думав, я б поділився, якщо інші люди виявлять, що це має щось спільне з підключенням периферійних пристроїв (якщо це зовнішній екран)


У мене була схожа ситуація. Коли я відключив роз'єднаний USB-адаптер дисплея, перестав споживати надмірну кількість процесора (відповідно до "верху"), і коли я знову підключив його, проблема не одразу знову з’явилася.
Дальбергія

Це виявилося і для мене проблемою. Дякую!
Ерік Сімонтон

2

Це здається, коли програма якось неправильно використовує API сповіщень, наданий macOS. У моєму випадку винуватцем став iTerm2. Після виходу з нього distnotedпроцеси завершилися. Іншими винуватцями, які були визначені, є Emacs та iTunes.


1
iTerm2 викликає це і для мене.
ctc


0

Це трапилося і зі мною, перекручений сходив з розуму. Закривши купу додатків, нічого не допомогло.

Тоді я помітив, що один із тих діалогів «Повідомити Apple» із розбитого процесу Python був залишений відкритим всю ніч.

Хоча це може бути просто збіг, після закриття діалогового вікна неспокійний процес заспокоївся.


0

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

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

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

Висновок: надвисоке використання процесора, можливо, було пов'язане з піднесеним. Тепер, коли піднесене оновлення оновилося, сподіваємось, мій висновок правильний, використання процесора залишається низьким, і моя команда subl повертається до роботи, як очікувалося, тепер, коли викреслена запускається знову, без того, щоб мій crontab вбивав процес кожні 2 хвилини.


0

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

Тому моя відповідь, поки я не знаю краще, - рекомендувати вам вбивати iTunes, а не distnoted, і дайте нам знати, що відбувається.


-1

Я також бачу перекручений перехід, і в моєму випадку це здається пов'язаним з шрифтом. У мене три спотворені біг, один для _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

Кожен раз, коли перекреслена їсть процесор (30-90%), шрифт та шрифт їдять близько 30-60% процесора кожен. Як тільки я вбиваю шрифт, заспокоюється і шрифт для мого користувача заспокоюється. Вбивство шрифтів не робить нічого. Через пару хвилин, коли 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

Пітер Баклі прав, я помиляюся. Я ненавиджу це, коли це трапляється.

Не видаляйте спотворені, наступне завантаження буде зовсім не веселим.

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


Це горіхи. Як наголошується в сторінці компанії Apple про distnoted , distnoted є частиною OS X, має справу з розподіленими повідомлень, і було навколо , так як по крайней мере , 2005.
jfmercer

Що б ви не робили, НЕ рухайтесь так, distnotedяк ConorR згадав (а пізніше виправлено, спасибі!), Потрібно запустити OSX (в моєму випадку 10.9.5).
Пітер Баклі

Оскільки це насправді не відповідь, я думаю, що важливо, щоб це залишалося десь на сторінці. Я майже не розглядав спробу переїзду без уваги.
Зенексер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.