Quanta troca é uma determinada aplicação Mac usando?

14

Existe alguma maneira de saber se um determinado aplicativo em execução no Mac OSX (10.2+) tem parte de sua memória trocada (por exemplo, para um dos arquivos /private/var/vm/swapfile* )? E quanto?

Recompensa (150 rps)

pergunta simples. A primeira resposta correta será aceita se eu a ver com menos de 2 dias do vencimento do período de recompensa. Se eu ainda não tiver um, eu o concederei a quem me contar o fato novo mais interessante. E se eu não aprender uma única coisa de nenhuma das respostas, eu recompensarei a recompensa para quem escreve mais lindamente.

    
por Charles Stewart 18.01.2010 / 10:57

5 respostas

11

Eu estive pesquisando muito ;-) Pelo que entendi, a memória virtual de um determinado processo é dividida em páginas que são manipulados pelo sistema operacional e apresentados ao aplicativo como se fosse RAM.

No OS X, baseado no kernel Mach, isso é tratado por um daemon chamado dynamic_pager . Este processo gera o (s) swapfile (s) em /private/var/vm como você mencionou. Esses arquivos de swap não são gerados em uma base por aplicativo, mas em uma base de "necessidade de memória". Os arquivos de swap são divididos em páginas de 4096 bytes, e as páginas são então alocadas para os processos que (são considerados pelo SO) precisam de memória virtual. Portanto, você não pode associar um arquivo de swap a um determinado aplicativo, mas pode ver quantas páginas um determinado processo está usando.

Você pode querer experimentar o comando vm_stat em Termial. Isso fornece uma estatística do uso de VMs (observe que o número de páginas com tamanho de página ativo é igual ao tamanho do swapfile (s)). Isso também explica por que você pode ter vários processos usando a VM, mas apenas alguns arquivos de troca.

Outros comandos divertidos são vmmap [process id] e pagestuff .

    
por 06.02.2010 / 07:29
5

O comando vmmap PID deve fornecer algumas estatísticas úteis em números sobre um determinado processo.

    
por 06.02.2010 / 07:44
3

Com base nas ideias postadas aqui, criei esta pequena linha de código:

sudo vmmap notifyd | grep -A3 'Summary'

que exibe a seção Resumo (3 linhas) da saída do vmmap. Eu usei notifyd neste exemplo, mas você pode substituir isso com qualquer PID que você conheça.

Esta linha tentará listar todas as linhas de resumo de todos os processos em execução. Obviamente, alguns falharão porque o ID do processo deles já passou (processo finalizado), mas, em geral, descobri que essa é uma ótima maneira de percorrer uma lista de informações de memória e localizar o melhor alternador.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Editado: Algum usuário anônimo viu esta última linha de comando necessária uma melhoria porque obviamente a variante original não funcionava mais. Então muito obrigado quem você é e me desculpe sua edição foi rejeitada. (Primeiro comando previamente lido 'ps xa' e resultou no vmmap para falhar por causa da manchete de ps sendo lançada nele)

Melhorias adicionais: Se você gosta de saber o nome do programa imediatamente, use esta pequena alteração

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

Uma pequena alteração na outra extremidade deste comando permite que você filtre determinados nomes de programa ou componentes do caminho da linha de comando. Aqui nós estamos olhando para todos os processos de 'Library / PrivateFrameworks' apenas por exemplo.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
    
por 05.09.2014 / 16:37
0

Abra o Activity Monitor na sua pasta / Applications / Utilities e há uma coluna de memória virtual que lhe dirá isso. Você pode clicar no cabeçalho da Memória Virtual para classificar pela maioria ou pelo menos usado pelo aplicativo. Além disso, lembre-se de alterar Meus processos para todos os processos e esteja ciente de que um aplicativo pode ter vários processos. Por exemplo, o aplicativo de terceiros Little Snitch é composto por "Little Snitch Network Monitor" e "Little Snitch UIAgent".

    
por 18.01.2010 / 20:03
0

Como disse o ridogi, abra o Activity Monitor. Navegue até o processo que deseja inspecionar e clique em ... Inspecionar! Em seguida, clique em memória; isso lhe dirá quanto de troca o processo está usando.

Divirta-se!

    
por 05.02.2010 / 00:42