Come diagnosticare il balloon_ OS X kernel_task e l'utilizzo della memoria cablata?


18

Ho un problema molto strano, che faccio fatica a diagnosticare la causa principale.

Ho un Mac Pro (2008, 8 core a 2,8 GHz, 8800 GT) con 14 GB di RAM (recentemente aggiornato a causa di questo problema!).

Quando avvio il mio sistema e accedo, vm_stat / top / Activity Monitor mostrerà che kernel_task ha circa 150 MB allocati e la macchina ha circa 800 MB di memoria cablata allocata.

Anche inizialmente, 800 MB sembrano un'enorme quantità di memoria cablata da allocare senza applicazioni in esecuzione, ma peggiora. (NB: Wired è bloccato, memoria non sostituibile )

Dopo pochissimo tempo, a volte innescato da qualcosa di semplice come il lancio di un terminale, kernel_task passa a 8-900 MB di Real Mem (RSIZE) e Wired Memory accelera a 1,6 GB (il che implica che tutte le richieste di memoria extra sono per RAM cablata nel kernel).

Se chiudo tutto (IE: nessuna applicazione in esecuzione, blocco un monitor attività o un terminale per visualizzare la parte superiore), non vi è alcuna riduzione apprezzabile nell'utilizzo di kernel_task RSIZE o nell'utilizzo della memoria cablata. Andare nella direzione opposta e caricare il sistema con attività mostra anche che la memoria cablata non si riduce e che, cosa più importante, non si riduce in preferenza allo scambio pesante.

Se esco e riconnetto, si riduce un po '(450 MB kernel_task, 1,28 GB cablati), ma non torna all'inizio.

Non sto eseguendo nessun stravagante kext e, inoltre, kextstat non mostra grandi allocazioni di memoria lì; il più grande è com.apple.nvidia.nv50hal a circa 4 MB di memoria.

La macchina sembra complessivamente più lenta quando ciò è accaduto, il che non sorprende perché un'enorme quantità di RAM è stata contrassegnata come non paginabile.

Quindi ho alcune domande:

1) Esiste un buon modo per diagnosticare ciò che ha allocato tutta questa memoria cablata? Spesso è oltre 2 volte la dimensione kernel_task, non esegue applicazioni. Il totale della memoria reale non sembra sommarsi - sembra che ci sia un sacco di RAM che non viene considerata da nessuna parte.

2) Cosa sta succedendo per far sì che il kernel richieda improvvisamente 6 volte più memoria?


Risposte:


5

Per scoprire perché il kernel utilizza più memoria del solito, puoi usare diversi strumenti.

  1. Esegui Activity Monitor per verificare quali processi utilizzano la maggior parte della memoria, quindi è un'attività che kernel_tasknon utilizza più memoria del solito (quindi considera di ucciderla).
  2. Esegui in Terminal vm_stat 1per visualizzare le statistiche della memoria in tempo reale e se la memoria aumenta davvero ogni secondo.
  3. Esegui lo strumento fs_usage(come root) per monitorare le chiamate di sistema e gli errori di pagina in tempo reale.
  4. Per verificare la somma delle allocazioni sporche / anonime di più processi eseguiti nel Terminale:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Raccoglierebbe informazioni sulla memoria come quanto è stato scambiato (per utente o memoria del kernel).

  5. Inoltre, se pensi che sia il kernel a utilizzare la maggior parte della memoria, prova lo zprintstrumento:

    sudo zprint -t -s | head -n20
    

    Mostrerà le informazioni sulle zone del kernel

Se desideri forzare l'eliminazione della cache del disco (per liberare un po 'di memoria), puoi provare:

sync && sudo purge

Vedi anche: Come esaminare l'utilizzo elevato della memoria delle attività del kernel? presso AD SE


3

Le estensioni del kernel sono solo uno dei tanti, molti, molti frammenti di codice che possono essere eseguiti dal sistema operativo a tua insaputa. Ho una piccola utility basata su Python chiamata Consultant's Canary che ti aiuterà a trovarne un bel po ':

Se ciò non presenta alcun potenziale colpevole, allora direi l'avvio da un'installazione pulita e vedere se è possibile riprodurre il problema lì.

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.