Como diagnosticar o kernel_task do OS X e o uso de memória com fio?

18

Eu tenho um problema muito estranho, que estou tendo dificuldade em diagnosticar quanto à causa raiz.

Eu tenho um Mac Pro (2008, 8 núcleos, 2,8 GHz, 8800GT) com 14 GB de RAM (atualizado recentemente devido a esse problema!).

Quando eu inicializo meu sistema e efetuo login, vm_stat / top / Activity Monitor mostrará que kernel_task possui cerca de 150 MB alocados e a máquina possui cerca de 800 MB de memória com fio sendo alocada.

Mesmo inicialmente, 800 MB parecem uma quantidade enorme de memória com fio a ser alocada sem aplicativos em execução - mas piora. (NB: Wired está bloqueado, memória não trocável )

Depois de um tempo muito curto, às vezes acionado por algo tão simples quanto o lançamento de um terminal, o kernel_task aumentará para 8-900 MB de Real Mem (RSIZE) e a Memória com fio será acelerada para 1,6 GB (implicando que todas as solicitações de memória extra sejam necessárias). RAM com fio no kernel).

Se eu sair de tudo (IE: sem aplicativos em execução, barrar um monitor de atividade ou um terminal para visualizar o topo), não haverá redução significativa no uso do kernel_task RSIZE ou da memória com fio. Seguir o caminho oposto e carregar tarefas do sistema também mostra que a memória com fio não é reduzida - e que, o que é mais importante, não é reduzida, de preferência à troca pesada.

Se eu sair e entrar novamente, isso reduzirá um pouco (450 MB kernel_task, 1,28 GB com fio), mas não voltará ao início.

Não estou executando nenhum kext esquisito - além disso, o kextstat não mostra grandes alocações de memória; o maior sendo com.apple.nvidia.nv50hal com cerca de 4 MB de memória.

No geral, a máquina fica mais lenta quando isso acontece - sem surpresa, porque uma quantidade tão grande de RAM foi marcada como não paginável.

Então, eu tenho algumas perguntas:

1) Existe uma boa maneira de diagnosticar o que alocou toda essa memória com fio? Geralmente é duas vezes maior que o tamanho do kernel_task, sem executar aplicativos. O total da memória real parece não aumentar - parece que há um monte de RAM que não está sendo contabilizada em nenhum lugar.

2) O que está acontecendo para fazer com que o kernel subitamente exija 6 vezes mais memória?

kenorb
fonte
1
Provavelmente relacionado a este código.google.com
p

Respostas:

5

Para investigar por que o kernel usa mais memória que o normal, você pode usar ferramentas diferentes.

  1. Execute o Activity Monitor para verificar quais processos estão usando a maior parte da memória; portanto, é uma kernel_tasktarefa, não qualquer outra, que usa mais memória do que o habitual (considere matá-lo).
  2. Execute o Terminal vm_stat 1para ver as estatísticas da memória em tempo real e se a sua memória está realmente aumentando a cada segundo.
  3. Execute a fs_usageferramenta (como raiz) para monitorar chamadas do sistema e falhas de página em tempo real.
  4. Para verificar a soma das alocações sujas / anônimas de vários processos executados no Terminal:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Reúne informações de memória, como quanto foi trocado (por usuário ou memória do kernel).

  5. Além disso, se você acha que o kernel está usando mais memória, tente a zprintferramenta:

    sudo zprint -t -s | head -n20
    

    Ele mostrará as informações sobre zonas do kernel

Se você deseja forçar a remoção do cache do disco (para liberar memória), tente:

sync && sudo purge

Consulte também: Como investigar o alto uso de memória de tarefas do kernel? no AD SE

kenorb
fonte
3

As extensões do kernel são apenas um dos muitos, muitos fragmentos de código que podem ser executados pelo sistema operacional sem o seu conhecimento. Eu tenho um pequeno utilitário baseado em Python chamado Consultant's Canary que o ajudará a encontrar alguns deles:

Se isso não resultar em possíveis culpados, eu diria que inicialize a partir de uma instalação limpa e veja se você pode reproduzir o problema lá.

Hasaan Chop
fonte