processo descontrolado em fuga

116

Às vezes, vejo um distnotedprocesso girar de repente e consumir 100% da CPU (em um núcleo) e uma tonelada de memória, geralmente na faixa de 1,5 G ou mais. Isso acontece algumas vezes por dia, a partir de um mês ou mais atrás.

A linha de comando é /usr/sbin/distnoted agent, e é iniciada por launchd, nenhuma das quais ajuda muito. Geralmente, ele funciona entre 4h e 24h antes de girar e ligar a CPU.

Pesquisas na web dizem que distnotedgerencia a entrega de notificações e muitas outras pessoas relatam o mesmo problema, mas ainda não encontrei uma correção. Algumas pessoas acham que o fechamento de um aplicativo culpado (por exemplo, o Skype) o interrompe, mas ainda não encontrei um culpado na minha máquina. Normalmente, estou executando apenas alguns aplicativos: Emacs (24.2 da Homebrew), Firefox, Adium e Dash.

Estou no Mavericks no final de 2012 13 "Retina MBP. Agradecemos antecipadamente!

Atualizar:

Ativei o distnotedlogin no log do sistema tocando em /var/log/do_dnserver_log, mas isso não ajuda muito. Vejo linhas como estas (uid 501 sou eu, 89 ainda não encontrei):

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.

Também executei sudo dtruss -p PIDum distnotedprocesso acelerado e vomita linhas como esta:

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
...
ryan
fonte
Apenas pescando aqui, mas por qualquer mudança vocês estão correndo o fluxo ? Para mim, eles parecem estar relacionados. Se eu parar o fluxo quando o emacs ficar furioso, o emacs trava ou volta ao normal. Não tenho certeza se isso foi um acaso (apenas aconteceu duas vezes), mas se todo mundo está executando, pode haver algo a fazer.
Eu não estou executando o fluxo, mas talvez outros estejam.
ryan
o aquaemacs faz com que esse processo se repita em mim.
maratona de
Eu tive um problema muito semelhante (possivelmente o mesmo) e meu problema foi resolvido com a atualização do sistema operacional 10.9.4.
precisa
Notou isso hoje. O culpado foi o aplicativo Google Drive para OS X (10.9) (1.17.7290.4094). Primeira vez que vi isso.
Jordanpg # 10/14

Respostas:

24

Resumo do OP : Essa foi uma ótima ferramenta para depuração. Originalmente, ele me indicou o Spotlight reindexando o sistema de arquivos, mas reduzi o que é permitido indexar e ainda vi o problema. Eu acabei configurando um trabalho cron para matar distnoted regularmente. Veja a resposta mais abaixo.


Você pode depurar distintamente criando o arquivo /var/log/do_dnserver_log Isso faz com que o CFNotificationCenterservidor ( distnoted) grave informações sobre todas as notificações no log do sistema.

Gostaria de começar por aí, reiniciar e olhar o log do sistema quando a CPU disparar. Isso deve sair o culpado facilmente.

Mais informações sobre CFNotificationCenterdepuração podem ser encontradas nos documentos oficiais do desenvolvedor aqui: Nota técnica TN2124> CFNotificationCenter

Temikus
fonte
obrigado! boa ligação, eu já fiz isso. não estou vendo nenhuma entrada distinta /var/log/system.log, mas ela também não foi ativada desde que iniciei o log. dedos cruzados.
ryan
Estou vendo linhas de log distintas agora, mas elas não são muito úteis. suspiro. exemplo: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
Tente anexar o script do DTrace a esse processo e veja o que ele realmente faz, comece com sudo dtruss -p PIDe veja quais syscalls o processo realmente tenta fazer e se houver algum com falha (o status não é 0).
Temikus
Além disso, qual é o UID 89 no seu sistema? O UID nas notificações muda? O pid 2644 corresponde a um processo distinto ou outro?
Temikus
obrigado pelas idéias! estou familiarizado strace, mas não sabia dtruss. Definitivamente vou tentar isso da próxima vez. os pids são apenas o processo distinto correspondente e os únicos uids são eu e _appserveradmum usuário interno do sistema que eu não conheço muito.
ryan
33

Eu já vi isso também. Emacs 24.3.1, Mavericks 10.9.

Descobri que o processo distinto se acalma em segundos depois que eu saí do Emacs.

Arquivei um bug do Emacs aqui: http://permalink.gmane.org/gmane.emacs.bugs/80836

Don Tillman
fonte
2
Também visto no Emacs v23.4.1.
WilliamKF
1
O mesmo aqui. Nunca imaginei que fosse causado pelo Emacs! Obrigado
Lionel Henry
1
Para mim, eu estou tendo o problema inverso - o Emacs começa a usar toda a CPU, e matar os problemas do meu usuário elimina o problema temporariamente. Nesse caso, observando o processo Emacs, vejo muitos threads - originários que não são do Emacs - todos aguardando na fila / mutex com.apple.root.default-overcommit-priority / runex (execute lldb, "processo anexado - pid <pid> "e, em seguida,"
encadear
e esta é uma leitura interessante sobre o que realmente são todos esses tópicos: newosxbook.com/articles/GCD.html (meu assassinato distorcido pode ser uma 'pena mágica', e não a coisa que o traz de volta ao normal)
jrg
Também visto com o Emacs v24.5 no OS X 10.11.3
Michael
23

Sei que estou atrasado para a festa, mas esse é um vazamento de memória específico do Cocoa emacs no Mavericks, que está consertado no porta-malas. Por enquanto, existe um patch que você pode usar para criar o emacs 24.3 apenas com a correção.

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


user68323
fonte
1
Atualizei para uma compilação noturna do Emacs para Mac OS X (em março) e ainda tenho o problema. Parece que acontece se eu criar uma sessão interativa para R ou Clojure (linguagens de programação). O processo diferenciado subirá lentamente para GB de RAM e o liberará assim que eu sair do Emacs.
mattrepl
O mesmo problema que o @mattrepl mencionou.
Amelio Vazquez-Reina
1
O Homebrew parece ter integrado esse patch. Portanto, também brew reinstall emacs --cocoa --with-gnutlspode resolver o problema. Também deve ser corrigido em 24.4, mas ainda não está estável.
mblakele
Apenas experimentei esse problema com o Emacs 24.5 (a correção deveria estar em 24.4) .. no meu caso, o Emacs estava mostrando a bola giratória e distnoted estava usando quase 400% da CPU (por top) e matando -9 emacs não estava funcionando, mas depois de matar -HUP desmarcado emacs respondeu à matança.
Michael
17

Eu tenho tido os mesmos problemas distnotedno El Capitan há algum tempo. Minha solução não é tão dura quanto matá-la regularmente, mas verifico se ela está sem controle (alto uso da CPU) e depois a mato. Eu uso este script:

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

O script é executado a partir do cron a cada minuto com esta linha no crontab:

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

Na prática, o script mata distnoteduma ou duas vezes por dia, e normalmente isso ocorre após o backupdinício.

Para aqueles que não estão familiarizados com o uso do shell do OS X (linha de comando), o script a seguir instalará o checkdistnotedscript e a entrada 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
}

Você precisa salvar os itens acima como install_checkdistnoted.shna área de trabalho, executar Applications/Utilities/Terminale digitar:

cd Desktop
sh install_checkdistnoted.sh 

Se funcionar totalmente, imprimirá a confirmação de cada uma das etapas. O script não substituirá um checkdistnotedscript existente ou uma entrada crontab.

Michael Rourke
fonte
2
OBRIGADO! Solução fantástica que me permite manter-me desinteressada, mas a desliga quando fica fora de controle. Para outras pessoas como eu, que podem não estar familiarizadas com a maneira Unixy de fazer as coisas: 1). sua pasta pessoal não terá um diretório bin, crie uma pasta bin com seu nome de usuário e insira o script como um arquivo de texto chamado "checkdisnoted". 2) Para criar a entrada cron, execute "crontab -e" no terminal, pressione a tecla "i" para entrar no modo de inserção e cole toda a linha com asteriscos, depois pressione "esc" para voltar ao modo de comando e digite ": wq" para salvar o arquivo e sair do editor.
Mike
@ Michael Rourke: Esta é uma ótima solução. No entanto, o script de instalação contém erros de sintaxe no bash do meu Mac "GNU bash, versão 3.2.57 (1) -release (x86_64-apple-darwin15)". O "||" atalho lógico e "<< -" não parecem funcionar aqui.
Kakyo 21/08/16
@kakyo - desculpe, o script falhou porque uma guia se tornou espaços - corrigida agora.
Michael Rourke
8

desisti e segui a abordagem da marreta: mate-a automaticamente a cada minuto. suspiro.

eu coloquei isso em ~/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>

e depois instalei com launchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist.

ryan
fonte
1
A abordagem de Michael Rourke a seguir é um limpador de toque, pois só mata desobedecido quando começa a comer CPU.
Mike
@ Mike, mas a abordagem de Michael Rourke não lida com casos em que disnotedestá comendo RAM.
Cœur
@ Cœur - Sim. Eu não tive um problema com a ingestão de RAM desatualizada. Esse foi um problema que você viu?
mike
1
@ Mike sim, disnotedestava comendo 63 GB de RAM na minha High Sierra ontem. Até Ryan, em sua pergunta, afirma que o processo estava consumindo uma tonelada de memória .
Cœur
@ Cœur - bom ponto! Eu os votei novamente.
mike
4

Venho fazendo diferentes combinações de personalizações de remoção para diminuir esse comportamento; Eu acho que é modo comint. No 10.9 com o emacs 24.3.1 do homebrew (ou do emacsforosx), o vazamento + emacs distnoted (ambos aumentam lentamente no consumo de memória) ocorrerá com um buffer de modo shell aberto. Não será, se você apenas visitar os arquivos.

Só queria anotar aqui, o gmane parece estar fora do ar e eu continuo encontrando essa discussão na minha pesquisa duas vezes por semana para acompanhar esse problema.

Lang Martin
fonte
obrigado! Eu posso estar vendo a mesma coisa. eu pensei que os holofotes de castração (a resposta aceita) haviam funcionado para mim, mas ainda estou vendo descontrolados. obrigado novamente pela liderança, posso seguir isso e depurar mais também.
perfil
Eu acredito que é algo para lidar com o meu processo Emacs também. Distnoted se acalmou logo depois que eu matei o Emacs. Eu tenho server.el, edit-server.el e um shell python em execução o tempo todo para o registro.
Lester Cheung
Vendo a mesma coisa! Emacs para culpar!
justingordon
Eu nem sei o que é o modo comint e às vezes tenho o problema distinto do emacs. Portanto, talvez nenhum pacote específico seja o culpado.
huyz
2

Eu acho que só consigo me lembrar de duas ocasiões em que os destroçados ficaram loucos. Nesta ocasião, havia dois deles no topo da lista de CPUs e um estava acima de 400%. Isso aconteceu logo após o retorno ao escritório e a conexão de dois monitores externos - um dos quais é alimentado por USB -, imaginei que isso pudesse estar relacionado. Não fiz mais nada para tentar resolver o problema antes de puxar a tela USB, o que trouxe de volta a sanidade instantaneamente. E, em seguida, conectá-lo novamente não resultou em nenhum problema de repetição.

O que prova o que? Nenhuma idéia!

Eu os conecto centenas de vezes e é a primeira vez que me ocorre que isso pode estar relacionado. E como isso não acontece toda vez que eu o conecto, pode ter algo a ver com conectar os dois muito rapidamente um após o outro, ou algo aleatório assim. De qualquer maneira, pensei em compartilhar caso outras pessoas achem que isso tem algo a ver com a conexão de periféricos (se é isso que é uma tela externa)

petednz - fuzion
fonte
Eu tive uma situação semelhante. Quando desconectei meu adaptador de vídeo USB, sem as anotações, parei de consumir CPU em excesso (de acordo com "top") e, quando o conectei novamente, o problema não reapareceu imediatamente.
Dalbergia 16/09
Isso acabou sendo o problema para mim também. Obrigado!
22618 Eric
2

Isso parece acontecer quando um aplicativo de alguma forma faz um uso errado da API de notificação fornecida pelo macOS. No meu caso, o culpado foi o iTerm2. Depois de sair, os distnotedprocessos foram encerrados. Outros culpados que foram identificados são o Emacs e o iTunes.

xApple
fonte
1
O iTerm2 também causa isso para mim.
ctc
0

Pelo que vale, consegui corrigir esse problema desativando meu software antivírus.

David P. Caldwell
fonte
0

Isso aconteceu comigo também, desnorteado estava ficando louco. Depois de fechar um monte de aplicativos, nada ajudou.

Percebi então que uma daquelas caixas de diálogo 'Relatar para a Apple' de um processo em Python travado havia sido deixada aberta a noite toda.

Embora pudesse ser apenas coincidência, depois de fechar a caixa de diálogo, o processo distinto se acalmou.

Chris
fonte
0

Eu encontrei um problema semelhante com o distnoted há alguns meses e não conseguia rastrear por que o uso da CPU estava subindo acima de 100%. Por fim, adicionei uma entrada no meu crontab a killall distnotedcada 2 minutos que resolveu meu problema.

Recentemente, tenho tido um problema com o Sublime Text em que a digitação subl path/to/filefalhou ao abrir o arquivo corretamente no Sublime Editor. A reinicialização do aplicativo corrigiu o problema, mas rapidamente começou a acontecer novamente.

Depois de estancar meu cérebro sem fim, identifiquei o fato de que eu estava matando processos distintos a cada 2 minutos, por que o comando subl havia misteriosamente parado de funcionar.

A conclusão: o uso muito alto da CPU pode ter sido relacionado ao sublime. Agora que o sublime foi atualizado, espero que minha conclusão esteja correta, o uso da CPU permaneça baixo e meu comando subl volte a funcionar como esperado, agora que o distnoted está sendo executado novamente sem que meu crontab interrompa o processo a cada 2 minutos.

finiteloop
fonte
0

Eu também já tive esse problema há algum tempo, mas de forma intermitente. Aparentemente distorcido faz parte do iTunes e também causou problemas no Windows . Quando matei o iTunes (que estava tocando uma música), o distontedprocesso que estava usando 400% da minha CPU (eu tenho 4 núcleos) deixou de ser um problema.

Então, minha resposta, até que eu saiba melhor, é recomendar que você mate o iTunes e não distnoted, e deixe-nos saber o que acontece.

vy32
fonte
-1

Eu também vejo distorcida, mas no meu caso parece relacionada ao fontd. Eu tenho três em execução distinta, uma para _spotlight, uma para _distnote e uma para o meu usuário.

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

Sempre que o distnoted consome cpu (30-90%), o fontworker e o fontd consomem cerca de 30-60% do cpu cada. Assim que eu mato fontd, distnoted e fontworker para meu usuário se acalma. Matar o fontworker não faz nada. Após alguns minutos, quando o fontd foi reiniciado e está em execução há algum tempo, tudo começa novamente.

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

Eu não tenho idéia do por que isso está acontecendo ...

Nils
fonte
-2

Peter Buckley está certo, eu estou errado. Eu odeio quando isso acontece.

Não remova as notas distintas, a próxima inicialização não será divertida.

errado> eu tomei uma abordagem mais marreta
errado> 
incorreto> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
errado>
errado> Esta é uma máquina de trabalho e não tenho interesse em sincronizar com o iTunes.

ConorR
fonte
Isso é loucura. Como é observado na página da Apple sobre distnoted , distnoted faz parte do OS X, lida com notificações distribuídas, e tem sido em torno desde pelo menos 2005.
jfmercer
Faça o que fizer, NÃO se mova distnotedcomo o ConorR mencionou (e depois corrigiu, obrigado!); É necessário inicializar o OSX (10.9.5 no meu caso).
Peter Buckley
Por mais que isso não seja realmente uma resposta, acho importante que isso permaneça anotado em algum lugar da página. Eu quase considerei tentar me mover desnorteado.
Zenexer 16/05/19