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

17

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

Eu tenho um Mac Pro (2008, 8-core 2,8 GHz, 8800GT) com 14 GB de RAM (recentemente atualizado por causa deste problema!).

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

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

Após um curto período de tempo, algumas vezes desencadeado por algo tão simples como o lançamento de um terminal, o kernel_task vai para 8-900 MB de memória real (RSIZE), e a memória com fio acelera para 1,6 GB (implicando que toda a memória extra pedidos são para RAM com fio no kernel).

Se eu saio de tudo (I.E: sem aplicativos em execução, barra um monitor de atividades ou terminal para visualizar o topo), não há redução apreciável no uso do kernel_task RSIZE ou da memória com fio. Indo pelo caminho oposto, e carregando o sistema com tarefas, também mostra que a memória com fio não é reduzida - e que, de maneira importante, não é reduzida em preferência a trocas pesadas.

Se eu fizer logout e login novamente, ele reduzirá um pouco (450 MB kernel_task, 1,28 GB Wired), mas não voltará ao início.

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

A máquina parece mais lenta quando isso acontece - o que não é de surpreender porque uma quantidade tão grande de RAM foi marcada como não paginável.

Então, tenho algumas perguntas:

1) Existe uma boa maneira de diagnosticar o que alocou toda essa memória com fio? Geralmente, ele tem mais de 2 vezes o tamanho do kernel_task, sem executar aplicativos. O total de memória real não parece somar - parece que há um monte de RAM que não está sendo contabilizado em lugar nenhum.

2) O que está acontecendo para fazer com que o kernel de repente precise de 6 vezes mais memória?

    
por kenorb 21.02.2010 / 10:56

2 respostas

4

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

  1. Execute Activity Monitor para verificar quais processos usam a maior parte da memória, portanto, é kernel_task , e não qualquer outra tarefa que use mais memória do que o normal (então considere a possibilidade de eliminá-la).
  2. Execute no terminal vm_stat 1 para ver as estatísticas da memória em tempo real e se a sua memória estiver realmente aumentando a cada segundo.
  3. Execute a ferramenta fs_usage (como root) para monitorar chamadas do sistema e falhas de página em tempo real.
  4. Para verificar a soma de alocações sujas / anônimas de vários processos executados no Terminal:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Ele reunirá 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 que está usando mais memória, tente zprint tool:

    sudo zprint -t -s | head -n20
    

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

Se você quiser forçar o cache de disco a ser removido (para liberar alguma memória), tente:

sync && sudo purge

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

    
por 27.04.2015 / 14:20
3

Extensões de kernel são apenas um dos muitos, 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 Canário do Consultor, que irá ajudá-lo a encontrar alguns deles:

Se isso não resultar em potenciais culpados, então eu diria que inicializo de uma instalação limpa e veja se você consegue reproduzir o problema lá.

    
por 20.03.2010 / 01:44