121 votes

processus de déni de service

Parfois, je vois un distnoted se met soudainement en marche et consomme 100 % du processeur (sur un seul cœur) et une tonne de mémoire, souvent de l'ordre de 1,5 G environ. Cela se produit plusieurs fois par jour, depuis un mois environ.

La ligne de commande est /usr/sbin/distnoted agent et elle est lancée par launchd qui n'aident pas beaucoup. Il fonctionne généralement depuis 4 à 24 heures avant de se mettre à tourner et à bloquer le processeur.

Les recherches sur Internet disent distnoted gère la livraison des notifications, et beaucoup d'autres personnes signalent le même problème avec ce système, mais je n'ai pas encore trouvé de solution. Certaines personnes trouvent que la fermeture d'une application coupable (par exemple Skype) l'arrête, mais je n'ai pas encore trouvé de coupable sur ma machine. Je n'utilise généralement que quelques applications : Emacs (24.2 de Homebrew), Firefox, Adium et Dash.

Je suis sous Mavericks sur un MBP 13" Retina de fin 2012. Merci d'avance !

Mise à jour :

J'ai allumé distnoted dans le journal du système en touchant /var/log/do_dnserver_log mais cela n'aide pas beaucoup. Je vois des lignes comme celles-ci (uid 501 est moi, 89 je n'ai pas encore trouvé) :

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.

J'ai aussi exécuté sudo dtruss -p PID sur une filature distnoted et il crache des lignes comme celle-ci :

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
...

33voto

Don Tillman Points 331

J'ai vu cela aussi. Emacs 24.3.1, Mavericks 10.9.

J'ai constaté que le processus de distnotation se calme quelques secondes après que j'ai quitté Emacs.

J'ai déposé un bug Emacs ici : http://permalink.gmane.org/gmane.emacs.bugs/80836

25voto

Temikus Points 531

Résumé de l'OP : C'était un outil formidable pour le débogage. À l'origine, il m'a indiqué que Spotlight réindexait le système de fichiers, mais j'ai réduit les éléments qu'il est autorisé à indexer, et j'ai toujours vu le problème. J'ai fini par mettre en place une tâche cron pour tuer distnoted régulièrement. Voir la réponse plus bas.


Vous pouvez déboguer distnoted en créant le fichier /var/log/do_dnserver_log Cela entraîne le CFNotificationCenter serveur ( distnoted ) pour enregistrer les informations relatives à toutes les notifications dans le journal du système.

Je commencerais par là, je redémarrerais et regarderais le journal du système quand le CPU monte en flèche. Cela devrait permettre de trouver facilement le coupable.

Plus d'informations sur CFNotificationCenter Le débogage peut être trouvé dans les documents officiels du développeur ici : Note technique TN2124 > CFNotificationCenter

23voto

user68323 Points 266

Je sais que je suis en retard sur la fête mais il s'agit d'une fuite de mémoire spécifique à Cocoa emacs sur Mavericks qui est corrigée dans le tronc. Pour l'instant, il y a un patch que vous pouvez utiliser pour compiler emacs 24.3 avec juste le correctif.

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


18voto

Joshua Points 1114

J'ai eu les mêmes problèmes avec distnoted sur El Capitan depuis un certain temps. Ma solution n'est pas aussi dure que de le tuer régulièrement, je vérifie plutôt s'il est hors de contrôle (utilisation élevée du CPU), puis je le tue. J'utilise ce 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) 
    }
    '

Le script est lancé depuis cron toutes les minutes avec cette ligne dans crontab :

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

En pratique, le script tue distnoted une ou deux fois par jour, et cela se produit généralement après backupd commence.

Pour ceux qui ne sont pas à l'aise avec l'utilisation de l'interpréteur de commandes OS X (ligne de commande), le script suivant installera à la fois l'application checkdistnoted script et l'entrée 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
}

Vous devez sauvegarder ce qui précède en tant que install_checkdistnoted.sh sur votre bureau, puis exécutez Applications/Utilities/Terminal et le type :

cd Desktop
sh install_checkdistnoted.sh 

S'il fonctionne parfaitement, il imprimera une confirmation de chacune des étapes. Le script n'écrasera pas un fichier existant. checkdistnoted script ou entrée crontab.

8voto

ryan Points 1449

J'ai abandonné et j'ai adopté l'approche de la masse : le tuer automatiquement, chaque minute. soupir.

J'ai mis ça dans ~/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>

et l'a ensuite installé avec launchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X