Come esaminare l'utilizzo elevato della memoria delle attività del kernel?


131

Stavo usando il mio MBP (con 16 GB di RAM) come al solito e improvvisamente ho questo popup che:

Il sistema ha esaurito la memoria dell'applicazione.

Per evitare problemi con il computer, chiudere tutte le applicazioni che non si utilizzano.

Forza chiusura applicazioni - Il sistema ha esaurito la memoria dell'applicazione - screenshot

Ne ho ovviamente chiuse alcune che potevo, ma non mi aiutarono.

Dopo aver verificato la memoria, sembra che l'attività del kernel abbia mangiato 7 GB e che sia stata utilizzata una memoria di scambio di 22,36 GB per un totale di 23 GB (che ovviamente era il caso). Tuttavia ho ancora 20 GB di spazio libero sul mio SDD.

Memoria - Menu iStat - screenshot

Activity Monitor non ha aiutato molto mentre il mio OS X si stava dirigendo verso la distruzione.

Process Explorer

kernel_task - Scheda Memoria - screenshot kernel_task - Scheda Statistiche - screenshot

Le mie topstatistiche prima del blocco del kernel:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

Alla fine il mio OS X si è bloccato e ho dovuto eseguire hard reset, riparare il mio SDD in modalità di ripristino e correggerlo in seguito (ripristino del lavoro perso, risoluzione dei conflitti dell'applicazione, controllo della mia cartella lost + found, schede di Chrome / Terminal scomparse, mal di testa, ecc. ).

La mia domanda è: come posso verificare l'utilizzo elevato della memoria dell'attività del kernel o come gestire correttamente quel tipo di situazione? Ho provato a fare un campione con Activity Monitor, ma è disattivato.


I miei dettagli MBR: Intel Core i7 a 2,3 GHz (fine 2013) con 16 GB di RAM. OS X: 10.9.5


1
@klanomath Di solito ho molti blocchi soprattutto con tempi di attività lunghi e questi sono solo blocchi del kernel per motivi sconosciuti (il mio MBR è abbastanza nuovo). Ma questo è il primo che ho visto quel popup che ho esaurito la memoria (con 16 GB di RAM e 50 GB di spazio libero). Tuttavia la mia domanda principale è come indagare sull'utilizzo della memoria dell'attività del kernel, quindi se è riproducibile non dovrebbe essere rilevante.
Kenorb,

5
Usa zprint -t(Lion) o sudo zprint -t(Mountain Lion e successivi).
klanomath,

1
Hai ragione con l'irrilevanza della riproducibilità riguardo alla tua domanda nel titolo, ma potrebbe essere pertinente risolvere i tuoi problemi.
klanomath,

1
Ti dispiacerebbe aggiungere l'output alla tua domanda (o salvarlo nei tuoi documenti)? Solo per riferimento futuro / per poterlo confrontare con uno zprint realizzato in uno stato di sistema più critico. IMHO è una perdita di sfortuna. Se lo pubblichi, potrei essere in grado di dirti di più.
klanomath,

1
Ho lo stesso problema all'improvviso. Sono abbastanza sicuro che sia legato a docker per mac o hyperkit. Non appena fermo la finestra mobile per mac, kernal_task inizia a mangiare 10 GB + di memoria
Charlie Martin,

Risposte:


176

Ci sono molte cose che vanno male nell'uso elevato di attività del kernel. Di solito, ciò è correlato a processi difettosi o pesanti che utilizzano in modo eccessivo le risorse di sistema (come indicizzazione dell'archiviazione, esecuzione di macchine virtuali, troppe schede nel browser Web o altri processi in background).

Ecco alcuni metodi che aiutano a studiare i problemi di utilizzo del kernel di OS X:

Metodi di base

  • Esegui Console.appe controlla " Tutti i messaggi " per vedere se sta accadendo qualcosa di insolito.
  • Utilizzare Activity Monitor per leggere la memoria di sistema e determinare la quantità di CPU, RAM e disco utilizzata.

    In alternativa eseguire topnel terminale e tenere premuto Spaceper aggiornare - più facile trovare il problema causa ( swapins / swapouts / dischi ?).

  • Eseguisudo fs_usage in Terminal per segnalare in tempo reale le chiamate di sistema e gli errori di pagina relativi all'attività del filesystem (penso che questa sia l'opzione migliore da tutte le altre). Quindi premi Control- Cper fermarlo.

    Azione: considera la possibilità di uccidere le app che appaiono frequentemente nell'elenco, ma non le stai usando.

    Ulteriori informazioni su: Come eseguire il debug di un processo "kernel_task" fuori controllo?

  • Eseguisudo syscallbypid.d (o syscallbyproc.d), aspetta un po ', premi Control- C. Ora controlla quale processo ha generato il maggior numero di chiamate di sistema in quel dato momento (ultima colonna) e se lo riconosci, considera di ucciderlo. In caso contrario, Google e saperne di più.

Metodi avanzati

  • Usa il sysdiagnosecomando (può essere attivato premendo Shift- Control- - - .(punto) per raccogliere rapidamente informazioni diagnostiche a livello di sistema utili per indagare su problemi di memoria / prestazioni del sistema (appariranno in /var/tmp) da te o dai ragazzi di Apple. Durante l'analisi, cerca di non farlo qualsiasi cosa, una volta fatto, considera di decomprimere il file generato e analizzare i log.

    Vedi: Come si ottengono i file di diagnostica del sistema da OS X?

  • Esegui footprintper raccogliere informazioni dettagliate sulla memoria a livello di area per VM e byte scambiati:

    sudo footprint -a
    

    Versione precedente:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Usa spindumpper profilare l'intero sistema, genererà il /tmp/spindump.txtfile (incluso il kernel e le sue estensioni).

  • Utilizzare vm_statper mostrare le statistiche della memoria virtuale. Per esempio

    vm_stat 1 # to display every second.
    
  • Utilizzare zprintper controllare le informazioni sull'utilizzo del kernel, è possibile:

    sudo zprint -t -s | head -n20
    

    Mostrerà le zone del kernel più dispendiose.

  • Utilizzare newproc.dper snoop i nuovi processi man mano che vengono eseguiti, creatbyproc.dper i file:

    sudo newproc.d
    sudo creatbyproc.d
    

    Nota: su un nuovo OS X (10.11 o successivo) questo potrebbe non funzionare quando è abilitata la protezione dell'integrità (controllare con csrutil status).

  • Prova sar: reporter di attività del sistema che può campionare e segnalare vari contatori statistici cumulativi gestiti dal sistema operativo.

Per strumenti di debug più utili, controlla gli script dtrace ( grep dtrace /usr/bin/*). Se si conosce il processo difettoso che causa il problema, è possibile utilizzare dtrussper il debug.


Azioni

Ecco alcuni suggerimenti che possono aiutarti con i problemi del sistema operativo.

  • Liberare un po 'di memoria inattiva. Per fare ciò, devi prima svuotare la cache e forzare l'eliminazione della cache del disco:

    sync && sudo purge
    

    sync - forza il completamento delle scritture su disco in sospeso (flush cache)

    purge - forza l'eliminazione della cache del disco (svuotata e svuotata)

    La sua funzione è sostanzialmente quella di terminare tutte le operazioni di I / O in sospeso che utilizzano la cache del disco e quindi di liberare tutta la cache del disco occupato, quindi dovrebbe liberare spazio su disco per facilitare il paging e lo scambio dalla memoria principale. È sicuro da usare, poiché non influisce sulla memoria anonima che è stata allocata tramite malloc, vm_allocate, ecc.

  • Usa alcune app di terze parti per cancellare un po 'di memoria inutilizzata come iBoostUp , SystemPal , ecc.

  • Puoi anche disabilitare Spotlight temporaneo:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    E considera altri servizi di:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Esci dal browser Web e controlla se ciò aiuta. Ad esempio, l'utilizzo di Chrome è molto intraprendente, soprattutto quando è in corso un'elaborazione front-end in background (ad es. Javascript) o animazioni simili a pubblicità rendono costantemente il contenuto.


1
Spotlight continua a riapparire, ma non lo sto usando e ogni volta che lo uccido riappare il secondo dopo ... Come / dovrei sbarazzarmene?
ling

1
@ling Ti suggerirei di fare un'altra domanda, dato che si tratta di una memoria delle attività del kernel elevata, non di Spotlight.
Kenorb,

2
sospiro ho 4 GB di RAM sul mio mac, e solo di recente l'attività del kernel stava salendo a 3,1 GB, praticamente bloccando il mio intero computer. Chiusa la mia scheda Google Drive ed è scesa a 950 MB ...
Zizouz212

3
Non abbastanza specifico per risolvere effettivamente il problema di kernel_taskmemoria elevata e utilizzo della CPU.
hyiltiz,

6

Ho avuto un problema molto simile dopo aver sostituito il mio schermo LCD su un iMac di fine 2012. La ventola funzionava a RPM elevati e aveva un utilizzo elevato della CPU Kernel_task. L'ho ridotto a un sensore di temperatura che devi spostare dal vecchio schermo LCD al nuovo schermo sostitutivo. se si dimentica di farlo, la velocità della CPU e Kernel_task subiscono un rallentamento del sistema.

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.