processo distinto in fuga


116

A volte vedo un distnotedprocesso improvvisamente girare e masticare CPU al 100% (su un core) e una tonnellata di memoria, spesso in prossimità di 1,5 G circa. Questo succede alcune volte al giorno, a partire da circa un mese fa.

La riga di comando è /usr/sbin/distnoted agented è avviata da launchdnessuno dei quali aiuta molto. Di solito è in esecuzione da qualche parte tra le 4h e le 24h prima che giri e pioli la CPU.

Le ricerche sul web dicono che distnotedgestisce la consegna delle notifiche e molte altre persone segnalano lo stesso problema, ma non ho ancora trovato una soluzione. Alcuni ritengono che la chiusura di un'applicazione colpevole (ad esempio Skype) la interrompa, ma non ho ancora trovato un colpevole sulla mia macchina. Di solito utilizzo solo alcune app: Emacs (24.2 da Homebrew), Firefox, Adium e Dash.

Sono su Mavericks su un Retina MBP da 13 "alla fine del 2012. Grazie in anticipo!

Aggiornare:

Ho attivato la distnotedregistrazione nel registro di sistema toccando /var/log/do_dnserver_log, ma non aiuta molto. Vedo righe come queste (io sono 501, 89 non l'ho ancora trovato):

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.

Ho anche eseguito sudo dtruss -p PIDun distnotedprocesso di spun-up e emette linee come questa:

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

Basta pescare qui, ma per caso stai facendo il flusso ? Per me, sembrano essere correlati. Se interrompo il flusso quando emacs impazzisce, emacs si arresta in modo anomalo o torna alla normalità. Non sono sicuro che questo sia un colpo di fortuna (è successo solo due volte), ma se tutti lo eseguono, potrebbe esserci qualcosa.

non sto eseguendo il flusso, ma forse altri lo sono.
Ryan,

aquaemacs mi fa fallire questo processo.
maratona del

Ho avuto un problema molto simile (probabilmente lo stesso problema) e il mio problema è andato via con l'aggiornamento del sistema operativo 10.9.4.
Chris Quenelle,

L'ho notato oggi. Il colpevole era l'app Google Drive per OS X (10.9) (1.17.7290.4094). La prima volta che l'ho visto.
jordanpg,

Risposte:


24

Riepilogo dall'OP : questo è stato un ottimo strumento per il debug. Inizialmente mi ha indicato Spotlight che reindicizza il filesystem, ma ho ristretto le cose che è consentito indicizzare e ho ancora riscontrato il problema. Ho finito per impostare un lavoro cron per uccidere regolarmente i distnotati. Vedi la risposta più in basso.


È possibile eseguire il debug delle informazioni distinte creando il file /var/log/do_dnserver_log Questo fa sì che il CFNotificationCenterserver ( distnoted) registri le informazioni su tutte le notifiche nel registro di sistema.

Vorrei iniziare lì, riavviare e guardare il registro di sistema quando la CPU si alza. Questo dovrebbe facilmente eliminare il colpevole.

Maggiori informazioni sul CFNotificationCenterdebug sono disponibili nei documenti ufficiali dello sviluppatore qui: Nota tecnica TN2124> CFNotificationCenter


Grazie! buona chiamata, ora l'ho fatto. non vedo alcuna voce distnotata in /var/log/system.log, ma non si è ancora verificato da quando ho iniziato la registrazione. dita incrociate.
Ryan

sto vedendo le righe di registro distorte ora, ma non sono troppo utili. sospiro. esempio: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,

Prova ad associare lo script DTrace a quel processo e vedi cosa fa realmente, inizia sudo dtruss -p PIDe vedi quali syscalls tenta effettivamente di fare il processo e se ce ne sono alcuni falliti (lo stato non è 0).
Temikus,

Inoltre, qual è l'UID 89 sul tuo sistema? L'UID nelle notifiche cambia? Il pid 2644 corrisponde a distnotato o ad un altro processo?
Temikus,

grazie per le idee! Ho familiarità con strace, ma io non conoscevo dtruss. lo proverò sicuramente la prossima volta. i pids sono solo il corrispondente processo distinto, e gli unici uidi sono io e _appserveradmun utente di sistema integrato di cui non so molto.
Ryan,

33

Ho visto anche questo. Emacs 24.3.1, Mavericks 10.9.

Ho scoperto che il processo distnoted si calma dopo pochi secondi dopo aver lasciato Emacs.

Ho presentato un bug di Emacs qui: http://permalink.gmane.org/gmane.emacs.bugs/80836


2
Visto anche con Emacs v23.4.1.
WilliamKF,

1
Anch'io. Non avrei mai immaginato che fosse causato da Emacs! Grazie
Lionel Henry,

1
Per me, ho riscontrato il problema opposto: Emacs inizia a utilizzare tutta la CPU e l'uccisione del mio utente distaccato elimina temporaneamente il problema. In questo caso, guardando il processo Emacs vedo molti thread - quelli non emacs originati - tutti in attesa sulla coda com.apple.root.default-overcommit-priorità / mutex (run lldb, "process attach --pid <pid> ", e poi" thread backtrace all "per vederli tutti)
jrg

e questa è una lettura interessante su cosa siano effettivamente tutti quei thread: newosxbook.com/articles/GCD.html (il mio assassino distinto potrebbe essere una 'piuma magica', e non la cosa che lo riporta alla normalità)
jrg

Visto anche con Emacs v24.5 su OS X 10.11.3
Michael

23

So di essere in ritardo alla festa, ma questa è una perdita di memoria specifica degli emacs di cacao su Mavericks che è stata riparata nel bagagliaio. Per ora c'è una patch che puoi usare per compilare emacs 24.3 con solo la correzione.

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



1
Ho aggiornato a una build notturna da Emacs per Mac OS X (a marzo) e ho ancora il problema. Sembra accadere se creo una sessione interattiva per R o Clojure (linguaggi di programmazione). Il processo distinto salirà lentamente a GB di RAM e lo libererà non appena esco da Emacs.
Mattrepl,

Lo stesso problema menzionato da @mattrepl.
Amelio Vazquez-Reina,

1
Sembra che Homebrew abbia integrato questa patch. Quindi brew reinstall emacs --cocoa --with-gnutlspotrebbe anche risolvere il problema. Dovrebbe anche essere riparato in 24.4 ma questo non ha ancora raggiunto stabilità.
mblakele,

Ho appena riscontrato questo problema con Emacs 24.5 (la correzione doveva essere nella 24.4) .. nel mio caso, Emacs mostrava la palla rotante e distnotava prendeva quasi il 400% di CPU (per top) e uccidere -9 emacs non funzionava, ma dopo aver ucciso -HUP, gli emacs non annotati hanno risposto all'uccisione.
Michael,

17

Ho avuto gli stessi problemi con distnotedEl Capitan da qualche tempo. La mia soluzione non è così dura come ucciderla regolarmente, ma cerco che sia fuori controllo (elevato utilizzo della CPU), quindi la uccido. Uso questo 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) 
    }
    '

Lo script viene eseguito da cron ogni minuto con questa riga in crontab:

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

In pratica, lo script uccide distnoteduna o due volte al giorno e in genere ciò si verifica dopo l' backupdavvio.

Per coloro che non si sentono a proprio agio con l'uso della shell OS X (riga di comando), il seguente script installerà sia lo checkdistnotedscript che la voce 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
}

È necessario salvare quanto sopra come install_checkdistnoted.shsul desktop, quindi eseguire Applications/Utilities/Terminale digitare:

cd Desktop
sh install_checkdistnoted.sh 

Se funziona completamente stamperà la conferma di ciascuno dei passaggi. Lo script non sovrascriverà uno checkdistnotedscript esistente o una voce crontab.


2
GRAZIE! Soluzione formidabile che mi permette di rimanere scartato, ma lo spegne quando diventa fuori controllo. Per altre persone come me che potrebbero non avere familiarità con il modo Unixy di fare le cose: 1). la tua cartella home non avrà una cartella bin, crea una cartella bin sotto il tuo nome utente e inseriscici lo script come file di testo chiamato "checkdisnoted". 2). Per creare la voce cron, esegui "crontab -e" nel terminale, premi il tasto "i" per entrare in modalità inserimento, e incolla l'intera riga con gli asterischi, quindi premi "esc" per tornare in modalità comando, ed inserisci ": wq" per salvare il file ed uscire dall'editor.
mike,

@Michael Rourke: questa è un'ottima soluzione. Tuttavia, lo script di installazione contiene errori di sintassi nel bash incorporato nel mio Mac "GNU bash, versione 3.2.57 (1) -release (x86_64-apple-darwin15)". Il "||" collegamento logico e "<< -" non sembrano funzionare qui.
Kakyo,

@kakyo - molto dispiaciuto, lo script non è riuscito perché una scheda è diventata spazio - risolto ora.
Michael Rourke,

8

ho rinunciato e ho adottato l'approccio della mazza: uccidilo automaticamente, ogni minuto. sospiro.

ho inserito questo ~/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 poi installato con launchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist.


1
L'approccio di Michael Rourke di seguito è un detergente per il tocco, in quanto uccide solo scartato quando inizia a mangiare CPU.
mike,

@mike ma l'approccio di Michael Rourke non si occupa dei casi in cui si disnotedsta mangiando RAM.
Cœur

@ Cœur - Sì. Non ho riscontrato alcun problema con la RAM non annotata. È stato un problema che hai visto?
mike

1
@mike sì, disnotedieri ho mangiato 63 GB di RAM sul mio High Sierra. Perfino Ryan, nella sua domanda, afferma che il processo stava consumando un sacco di memoria .
Cœur

@Cœur - buon punto! Li ho votati.
mike

4

Ho fatto diverse combinazioni di personalizzazioni di stripping per restringere questo comportamento; Penso che sia la modalità Comint. Il 10.9 con emacs 24.3.1 da homebrew (o da emacsforosx) la perdita distnotata + emacs (entrambi aumentano lentamente nel consumo di memoria) avverrà con un buffer in modalità shell aperto. Non lo farà se si visitano solo i file.

Volevo solo annotarlo qui, gmane sembra essere inattivo e continuo a trovare questa discussione sulla mia ricerca bisettimanale di follow-up a questo problema.


Grazie! potrei davvero vedere la stessa cosa. pensavo che i riflettori di sterilizzazione (la risposta accettata) avessero funzionato per me, ma dopo tutto vedo ancora distnoteds in fuga. grazie ancora per il vantaggio, potrei seguire questo ed eseguire il debug di più.
Ryan,

Credo che sia qualcosa da gestire anche con il mio processo Emacs. i distnotati si calmarono subito dopo aver ucciso Emacs. Ho server.el, edit-server.el e una shell python sempre in esecuzione per la cronaca.
Lester Cheung,

Vedere la stessa cosa! Emacs da incolpare!
justingordon,

Non so nemmeno che cos'è la modalità Comint e ho il problema distinto da emacs a volte. Quindi forse non è colpa di nessun pacchetto specifico.
huyz,

2

Penso di ricordare solo 2 occasioni in cui Distnoted è andato in tilt. In questa occasione c'erano 2 di loro seduti in cima alla lista della CPU e uno era oltre il 400%. È successo poco dopo essere tornato in ufficio e aver collegato un paio di display esterni - uno dei quali è alimentato via USB - ho pensato che potesse essere correlato. Non ho fatto altro per provare a risolvere il problema prima di estrarre il display USB che ha riportato immediatamente la sanità mentale. E quindi ricollegarlo non ha comportato problemi di ripetizione.

Quale prova cosa? Nessuna idea!

Li collego centinaia di volte e questa è la prima volta che mi viene in mente che potrebbe essere correlato. E dal momento che non succede ogni volta che lo collego, allora potrebbe avere qualcosa a che fare con collegarli entrambi troppo rapidamente uno dopo l'altro o qualcosa di casuale come quello. Comunque ho pensato di condividere nel caso in cui altre persone trovassero che ha qualcosa a che fare con il collegamento delle periferiche (se è quello che è uno schermo esterno)


Ho avuto una situazione simile. Quando ho scollegato il mio adattatore USB per display, smesso di consumare eccessiva CPU (secondo "top") e quando l'ho ricollegato, il problema non si è ripresentato immediatamente.
Dalbergia,

Questo si è rivelato essere il problema anche per me. Grazie!
Eric Simonton,

2

Questo sembra accadere quando un'applicazione fa in qualche modo un uso errato dell'API di notifica fornita da macOS. Nel mio caso il colpevole era iTerm2. Dopo averlo abbandonato, i distnotedprocessi sono usciti. Altri colpevoli che sono stati identificati sono Emacs e iTunes.


1
iTerm2 lo causa anche per me.
ctc,

0

Per quello che vale, sono stato in grado di risolvere questo problema disabilitando il mio software antivirus.


0

Questo è successo anche a me, i distnotati stavano impazzendo. Dopo aver chiuso un sacco di applicazioni, nulla ha aiutato.

Poi ho notato che una di quelle finestre di dialogo "Segnala ad Apple" di un processo Python bloccato era rimasta aperta tutta la notte.

Anche se potrebbe essere solo una coincidenza, dopo aver chiuso la finestra di dialogo, il processo distinto si è calmato.


0

Mi sono imbattuto in un problema simile con distnotato alcuni mesi fa e non sono riuscito a rintracciare il motivo per cui l'utilizzo della CPU era al di sopra del 100%. Alla fine, ho aggiunto una voce al mio crontab killall distnotedogni 2 minuti che ha risolto il mio problema.

Di recente, ho riscontrato un problema con Sublime Text in cui la digitazione subl path/to/filenon riusciva ad aprire correttamente il file nell'editor Sublime. Un riavvio dell'app ha risolto il problema, ma ha ricominciato rapidamente a verificarsi.

Dopo aver distrutto il mio cervello fino in fondo, ho identificato il fatto che stavo uccidendo il processo distnotato ogni 2 minuti sul perché il comando subl avesse misteriosamente smesso di funzionare.

La conclusione: l'utilizzo super elevato della CPU potrebbe essere stato collegato al sublime. Ora che sublime è stato aggiornato, si spera che la mia conclusione sia corretta, l'utilizzo della CPU rimane basso e il mio comando subl torna a funzionare come previsto ora che distnoted è di nuovo in esecuzione senza che il mio crontab uccida il processo ogni 2 minuti.


0

Anch'io ho avuto questo problema, già da un po 'di tempo, ma a intermittenza. Apparentemente distinto è parte di iTunes e ha causato problemi anche su Windows . Quando ho ucciso iTunes (che stava riproducendo una canzone), il distontedprocesso che utilizzava il 400% della mia CPU (ho 4 core) ha smesso di essere un problema.

Quindi la mia risposta, fino a quando non lo saprò meglio, è di raccomandare di uccidere iTunes distnoted, e di farci sapere cosa succede.


-1

Vedo anche distnoted go haywire, nel mio caso sembra legato a fontd. Ho tre distnotati in esecuzione, uno per _spotlight, uno per _distnote e uno per il mio utente.

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

Ogni volta che la distnota mangia cpu (30-90%), fontworker e fontd mangiano circa il 30-60% cpu ciascuno. Non appena uccido fontd, distnoted e fontworker per il mio utente si calma. Uccidere fontworker non fa nulla. Dopo un paio di minuti, quando fontd si è riavviato ed è in esecuzione da un po ', tutto ricomincia.

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

Non ho idea del perché questo stia accadendo ...


-2

Peter Buckley ha ragione, mi sbaglio. Lo odio quando succede.

Non rimuovere distnoted, il prossimo avvio non sarà affatto divertente.

sbagliato> Ho adottato un approccio più mazza
sbagliato> 
sbagliato> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
sbagliato>
sbagliato> Questa è una macchina da lavoro e non ho interesse a sincronizzarmi con iTunes.


È pazzesco. Come notato nella pagina di Apple su distnoted , distnoted fa parte di OS X, si occupa di notifiche distribuite ed è in circolazione da almeno il 2005.
jfmercer

Qualunque cosa tu faccia, NON muoverti distnotedcome menzionato ConorR (e successivamente corretto, grazie!), È necessario per avviare OSX (10.9.5 nel mio caso).
Peter Buckley,

Per quanto questa non sia davvero una risposta, penso sia importante che questo rimanga notato da qualche parte nella pagina. Ho quasi preso in considerazione il tentativo di muovermi distaccato.
Zenexer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.