proceso desbocado

116

A veces veo que un distnotedproceso de repente gira y mastica el 100% de la CPU (en un núcleo) y una tonelada de memoria, a menudo cerca de 1.5G o menos. Esto sucede algunas veces al día, comenzando hace aproximadamente un mes.

La línea de comando es /usr/sbin/distnoted agent, y es iniciada por launchd, ninguna de las cuales ayuda mucho. Por lo general, se ha estado ejecutando entre 4h y 24h antes de que gire y conecte la CPU.

Las búsquedas en la web dicen que distnotedadministra la entrega de notificaciones, y muchas otras personas informan el mismo problema, pero aún no he encontrado una solución. Algunas personas encuentran que cerrar una aplicación culpable (por ejemplo, Skype) la detiene, pero todavía no he encontrado un culpable en mi máquina. Por lo general, solo estoy ejecutando algunas aplicaciones: Emacs (24.2 de Homebrew), Firefox, Adium y Dash.

Estoy en Mavericks a finales de 2012 13 "Retina MBP. Gracias de antemano!

Actualizar:

He activado el distnotedinicio de sesión en el registro del sistema tocando /var/log/do_dnserver_log, pero no ayuda mucho. Veo líneas como estas (uid 501 soy yo, 89 que aún no he encontrado):

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.

También me he ejecutado sudo dtruss -p PIDen un distnotedproceso acelerado, y arroja líneas 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
fuente
Sólo la pesca aquí, pero por ningún cambio ¿estás corriendo flujo ? Para mí, parecen estar relacionados. Si dejo de flux cuando emacs se vuelve loco, emacs se bloquea o vuelve a la normalidad. No estoy seguro de si esto es una casualidad (solo sucedió dos veces), pero si todos lo están ejecutando, podría haber algo.
No estoy ejecutando flujo, pero tal vez otros sí.
Ryan
aquaemacs hace que este proceso se voltee conmigo.
maratón
Tuve un problema muy similar (posiblemente el mismo problema) y mi problema desapareció con la actualización del sistema operativo 10.9.4.
Chris Quenelle
Noté esto hoy. El culpable fue la aplicación Google Drive para OS X (10.9) (1.17.7290.4094). La primera vez que veo esto.
jordanpg

Respuestas:

24

Resumen del OP : Esta fue una gran herramienta para la depuración. Originalmente me señaló a Spotlight reindexando el sistema de archivos, pero reduje las cosas que está permitido indexar, y todavía vi el problema. Terminé configurando un trabajo cron para matar a los disueltos regularmente. Ver respuesta más abajo.


Puede depurar distorsionados creando el archivo. /var/log/do_dnserver_log Esto hace que el CFNotificationCenterservidor ( distnoted) registre información sobre todas las notificaciones en el registro del sistema.

Comenzaría allí, reiniciaría y miraría el registro del sistema cuando la CPU se dispare. Esto debería sacar al culpable fácilmente.

CFNotificationCenterPuede encontrar más información sobre la depuración en los documentos oficiales del desarrollador aquí: Nota técnica TN2124> CFNotificationCenter

Temikus
fuente
¡Gracias! buena decisión, ya lo hice. No veo ninguna entrada distorsionada /var/log/system.log, pero tampoco ha aumentado desde que comencé el registro. dedos cruzados.
Ryan
Ahora estoy viendo líneas de registro diferenciadas, pero no son demasiado útiles. suspiro. ejemplo: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
Intente adjuntar la secuencia de comandos DTrace a ese proceso y vea lo que realmente hace, comience sudo dtruss -p PIDy vea qué llamadas al sistema realmente intenta hacer el proceso y si hay alguna falla (el estado no es 0).
Temikus
Además, ¿cuál es el UID 89 en su sistema? ¿Cambia el UID en las notificaciones? ¿El pid 2644 corresponde a un proceso diferido u otro?
Temikus
gracias por las ideas! Estoy familiarizado strace, pero no lo sabía dtruss. Definitivamente lo intentaré la próxima vez. los pids son solo el proceso correspondiente correspondiente, y los únicos uids son yo y _appserveradm, un usuario del sistema incorporado del que no sé mucho.
Ryan
33

Yo también he visto esto. Emacs 24.3.1, Mavericks 10.9.

Descubrí que el proceso marcado se calma en cuestión de segundos después de que salí de Emacs.

He presentado un error de Emacs aquí: http://permalink.gmane.org/gmane.emacs.bugs/80836

Don tillman
fuente
2
También visto con Emacs v23.4.1.
WilliamKF
1
Igual que aquí. ¡Nunca imaginé que fue causado por Emacs! Gracias
Lionel Henry
1
Para mí, he tenido el problema inverso: Emacs comienza a usar todas las CPU, y matar a mi usuario disuelto borra el problema temporalmente. En este caso, al observar el proceso de Emacs, veo muchos subprocesos, no originados por Emacs, todos esperando en la cola / mutex com.apple.root.default-overcommit-Priority (ejecutar lldb, "process attach --pid <pid> ", y luego" subprocesar todos "para verlos a todos)
jrg
y esta es una lectura interesante sobre cuáles son todos esos hilos en realidad: newosxbook.com/articles/GCD.html (mi asesinato disimulado podría ser una 'pluma mágica', y no lo que lo hace volver a la normalidad)
jrg
También visto con Emacs v24.5 en OS X 10.11.3
Michael
23

Sé que llego tarde a la fiesta, pero esta es una pérdida de memoria específica para Cocoa emacs en Mavericks que se repara en el maletero. Por ahora hay un parche que puede usar para construir emacs 24.3 con solo la solución.

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


usuario68323
fuente
1
Actualicé a una compilación nocturna desde Emacs para Mac OS X (en marzo) y todavía tengo el problema. Parece suceder si creo una sesión interactiva para R o Clojure (lenguajes de programación). El proceso anotado subirá lentamente a GB de RAM y lo liberará tan pronto como salga de Emacs.
mattrepl
Mismo problema que @mattrepl mencionó.
Amelio Vazquez-Reina
1
Homebrew parece haber integrado este parche. Por brew reinstall emacs --cocoa --with-gnutlslo tanto, también puede solucionar el problema. También se supone que está arreglado en 24.4, pero eso aún no ha llegado a estable.
mblakele
Acabo de experimentar este problema con Emacs 24.5 (se suponía que la solución estaba en 24.4) ... en mi caso, Emacs estaba mostrando la bola que giraba y disuelto estaba tomando casi un 400% de CPU (por top) y matar a -9 emacs no funcionaba, pero después de matar -HUP anotó emacs respondió a la muerte.
Michael
17

He tenido los mismos problemas con distnotedEl Capitán por algún tiempo. Mi solución no es tan dura como matarla regularmente, más bien la verifico sin control (uso elevado de CPU) y luego la mato. Yo 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) 
    }
    '

El script se ejecuta desde cron cada minuto con esta línea en crontab:

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

En la práctica, el script mata distnoteduna o dos veces al día, y generalmente esto ocurre después de backupdcomenzar.

Para aquellos que no se sienten cómodos con el uso del shell OS X (línea de comando), el siguiente script instalará tanto el checkdistnotedscript como la 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
}

Debe guardar lo anterior como install_checkdistnoted.shen su escritorio, luego ejecutar Applications/Utilities/Terminaly escribir:

cd Desktop
sh install_checkdistnoted.sh 

Si funciona completamente, imprimirá la confirmación de cada uno de los pasos. El script no sobrescribirá un checkdistnotedscript existente o una entrada crontab.

Michael Rourke
fuente
2
¡GRACIAS! Una solución fabulosa que me permite mantenerme desatendido, pero lo cierra cuando se sale de control. Para otras personas como yo que pueden no estar familiarizadas con la forma Unixy de hacer las cosas: 1). su carpeta de inicio no tendrá un directorio bin, cree una carpeta bin bajo su nombre de usuario y coloque el script allí como un archivo de texto llamado "checkdisnoted". 2) Para crear la entrada cron, ejecute "crontab -e" en la terminal, presione la tecla "i" para ingresar al modo de inserción y pegue toda la línea con los asteriscos, luego presione "esc" para volver al modo de comando e ingrese ": wq" para guardar el archivo y salir del editor.
Mike
@ Michael Rourke: Esta es una gran solución. Sin embargo, el script de instalación contiene errores de sintaxis en el bash integrado de mi Mac "GNU bash, versión 3.2.57 (1) -release (x86_64-apple-darwin15)". El "||" El atajo lógico y "<< -" no parecen funcionar aquí.
kakyo
@kakyo - lo siento mucho, el script falló porque una pestaña se convirtió en espacios - arreglado ahora.
Michael Rourke el
8

me di por vencido y tomé el enfoque de mazo: mátalo automáticamente, cada minuto. suspiro.

Puse esto en ~/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>

y luego lo instalé con launchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist.

Ryan
fuente
1
El enfoque de Michael Rourke a continuación es un limpiador táctil, ya que solo mata desapercibido cuando comienza a comer CPU.
Mike
@mike pero el enfoque de Michael Rourke no trata los casos en los que se disnotedestá comiendo RAM.
Coeur
@ Cœur - Sí. No he experimentado un problema con el consumo de RAM RAM. ¿Ha sido un problema que has visto?
Mike
1
@mike sí, ayer disnotedestaba comiendo 63 GB de RAM en mi High Sierra. Incluso Ryan, en su pregunta, afirma que el proceso estaba masticando una tonelada de memoria .
Coeur
@ Cœur - buen punto! Yo los voté.
Mike
4

He estado haciendo diferentes combinaciones de personalizaciones de eliminación para reducir este comportamiento; Creo que es el modo de impresión. En 10.9 con emacs 24.3.1 de homebrew (o de emacsforosx), la fuga disuelta + emacs (ambos aumentan lentamente el consumo de memoria) ocurrirá con un búfer de modo shell abierto. No lo hará si solo visita archivos.

Solo quería señalarlo aquí, parece que Gmane está caído y sigo encontrando esta discusión en mi búsqueda dos veces por semana para hacer un seguimiento de este problema.

Lang Martin
fuente
¡Gracias! De hecho, podría estar viendo lo mismo. Pensé que la atención neutralizada (la respuesta aceptada) había funcionado para mí, pero todavía estoy viendo a los descontrolados fugitivos después de todo. Gracias de nuevo por el liderazgo, puedo seguir esto y depurar más también.
Ryan
Creo que también es algo relacionado con mi proceso de Emacs. disimulado se calmó justo después de matar a Emacs. Tengo server.el, edit-server.el y un shell de Python ejecutándose en todo momento para el registro.
Lester Cheung
Al ver lo mismo! ¡Emacs a quien culpar!
justingordon
Ni siquiera sé qué es el modo de impresión y a veces tengo el problema de emacs. Entonces, quizás ningún paquete específico sea el culpable.
huyz
2

Creo que solo puedo recordar 2 ocasiones en las que se ha vuelto loco. En esta ocasión, había 2 de ellos en la parte superior de la lista de CPU y uno tenía más del 400%. Sucedió poco después de regresar a la oficina y enchufar un par de pantallas externas, una de las cuales funciona con USB, supuse que podría estar relacionado. No hice nada más para tratar de solucionar el problema antes de sacar la pantalla USB que devolvió la cordura al instante. Y luego enchufarlo nuevamente no resultó en un problema repetido.

¿Qué prueba qué? ¡Ni idea!

Los conecto cientos de veces y esta es la primera vez que se me ocurre que podría estar relacionado. Y dado que no sucede cada vez que los conecto, entonces podría tener algo que ver con enchufarlos a ambos demasiado rápido, o algo al azar como eso. De todos modos pensé que compartiría en caso de que otras personas descubrieran que tiene algo que ver con enchufar periféricos (si eso es lo que es una pantalla externa)

petednz - fuzion
fuente
Tuve una situación similar. Cuando desconecté mi adaptador de pantalla USB disuelto, dejé de consumir CPU excesiva (según "arriba"), y cuando lo volví a enchufar, el problema no volvió a aparecer de inmediato.
Dalbergia
Esto resultó ser el problema para mí también. ¡Gracias!
Eric Simonton
2

Esto parece suceder cuando una aplicación hace un uso incorrecto de la API de notificación proporcionada por macOS. En mi caso, el culpable fue iTerm2. Después de dejarlo, los distnotedprocesos salieron. Otros culpables que se han identificado son Emacs e iTunes.

xApple
fuente
1
iTerm2 lo causa también para mí.
ctc
0

Por lo que vale, pude solucionar este problema deshabilitando mi software antivirus.

David P. Caldwell
fuente
0

Esto también me sucedió a mí, disgustado se estaba volviendo loco. Después de cerrar un montón de aplicaciones, nada ayudó.

Entonces noté que uno de esos diálogos de 'Informe a Apple' de un proceso de Python bloqueado se había dejado abierto toda la noche.

Aunque podría ser solo una coincidencia, después de cerrar el diálogo, el proceso disuelto se calmó.

Chris
fuente
0

Me encontré con un problema similar con hace unos meses y no pude rastrear por qué el uso de la CPU se disparó por encima del 100%. Finalmente, agregué una entrada a mi crontab killall distnotedcada 2 minutos que resolvió mi problema.

Recientemente, he tenido un problema con Sublime Text donde el tipeo subl path/to/fileno podía abrir el archivo correctamente en el Sublime Editor. Un reinicio de la aplicación solucionó el problema, pero rápidamente comenzó a suceder nuevamente.

Después de atormentar mi cerebro sin fin, identifiqué el hecho de que estaba matando el proceso distorsionado cada 2 minutos por qué el comando subl había dejado de funcionar misteriosamente.

La conclusión: el uso de CPU súper alto puede haber estado relacionado con lo sublime. Ahora que sublime se ha actualizado, espero que mi conclusión sea correcta, el uso de la CPU sigue siendo bajo y mi comando subl vuelve a funcionar como se esperaba ahora que Distnoted se está ejecutando nuevamente sin que mi crontab elimine el proceso cada 2 minutos.

finiteloop
fuente
0

También he tenido este problema, desde hace bastante tiempo, pero de manera intermitente. Aparentemente diferido es parte de iTunes y también ha causado problemas en Windows . Cuando maté a iTunes (que estaba reproduciendo una canción), el distontedproceso que estaba usando el 400% de mi CPU (tengo 4 núcleos) dejó de ser un problema.

Entonces, mi respuesta, hasta que lo sepa mejor, es recomendarle que mate a iTunes, no distnoted, y háganos saber qué sucede.

vy32
fuente
-1

También veo que los indignados se vuelven locos, en mi caso parece estar relacionado con fontd. Tengo tres distingos en ejecución, uno para _spotlight, uno para _distnote y uno para mi usuario.

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

Cada vez que se distingue come CPU (30-90%), Fontworker y Fontd comen aproximadamente 30-60% de CPU cada uno. Tan pronto como mato a Fontd, Distnoted y Fontworker para mi usuario se calman. Matar fontworker no hace nada. Después de un par de minutos, cuando fontd se ha reiniciado y se ha estado ejecutando durante un tiempo, todo comienza de nuevo.

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

No tengo idea de por qué sucede esto ...

Nils
fuente
-2

Peter Buckley tiene razón, estoy equivocado. Odio cuando eso ocurre.

No elimines los disimulados, el próximo arranque no será nada divertido.

mal> tomé un enfoque más martillo
mal> 
mal> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
mal>
mal> Esta es una máquina de trabajo y no tengo interés en sincronizar con iTunes.

ConorR
fuente
Eso es una locura. Como se señala en la página de Apple acerca de los disociados , disociados es parte de OS X, se ocupa de las notificaciones distribuidas y existe desde al menos 2005.
jfmercer
Hagas lo que hagas, NO te muevas distnotedcomo lo mencionó ConorR (y luego lo corrigió, ¡gracias!), Es necesario iniciar OSX (10.9.5 en mi caso).
Peter Buckley
Si bien esto no es realmente una respuesta, creo que es importante que esto permanezca anotado en algún lugar de la página. Casi consideré intentar moverme disgustado.
Zenexer