Quanto swap um determinado aplicativo Mac está usando?

15

Existe alguma maneira de saber se um aplicativo específico em execução no Mac OSX (10.2+) possui parte de sua memória trocada (ou seja, para um dos /private/var/vm/swapfile*arquivos)? E quanto?

Recompensa (150 rps)

Questão simples. A primeira resposta correta será aceita se eu a vir com menos de 2 dias de vencimento do período de recompensa. Se eu ainda não tiver um, concederei a quem me contar o fato novo mais interessante. E se eu não aprendi nada com nenhuma das respostas, concederei a recompensa a quem escrever com mais beleza.

Charles Stewart
fonte
Esta é uma pergunta tão ruim. O número que você está procurando mudaria porque você estava tentando medi-lo (pense no princípio da incerteza de Heisenberg). Além disso, ele mudava o tempo todo, dependendo de outros aplicativos e seus requisitos de memória, padrões io e prioridade do processo. Se você encontrar o número, ele não será útil, a menos que você esteja editando o código do SO, porque há pouco que você fará do ponto de vista do aplicativo para alterá-lo.
G1010 # gavaletz
3
@gavaletz: Sai do lado errado da cama hoje de manhã? Eu quero o tipo de perfil de troca que o Linux torna possível usando / proc / $ pid / smaps. Normalmente, consigo identificar rajadas repentinas de atividade de troca usando meus ouvidos, por isso não estou muito preocupado com o princípio da incerteza de gavaletz.
Charles Stewart

Respostas:

13

Eu tenho pesquisado muito no Google ;-) Pelo que entendi, a memória virtual de um determinado processo é dividida em páginas que são tratadas pelo sistema operacional e apresentadas ao aplicativo como se fossem RAM.

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

Você pode tentar o comando vm_statem Termial. Isso fornece uma estatística do uso da VM (observe que 'tamanho da página' vezes o número de páginas ativas igual ao tamanho dos seus arquivos de troca). 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.

trolle3000
fonte
A propósito, confira developer.apple.com/mac/library/documentation/Darwin/Conceptual/… se você quiser saber um pouco mais.
Trolle3000
Isso parece promissor. Isso parece fornecer uma resposta definitiva para a primeira parte da pergunta e sugere uma resposta concreta para a segunda parte. Eu preciso cavar mais ...
Charles Stewart
Não é vmmap [pid]ou vmmap -pages [pid]a resposta para a segunda parte da sua pergunta?
Trolle3000
O vmmap $ pid fornece informações inequívocas sobre o que classifica como regiões graváveis. Não faz distinção entre memória alocada (ou seja, permutável) e memória trocada para regiões somente leitura, mas talvez a distinção não seja tão importante. Provavelmente vou aceitar esta resposta amanhã.
Charles Stewart
5

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

ayaz
fonte
mesmo vmmap [AppName] funciona
Studer
4

Com base nas idéias 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 vmmap. Eu usei notifydneste exemplo, mas você pode substituí-lo por qualquer PID que você conhece.

Esta linha tentará listar todas as linhas de resumo de todos os processos em execução. Obviamente, alguns irão falhar porque seu ID do processo já se foi (processo encerrado), mas, em geral, achei que essa é uma ótima maneira de percorrer uma lista de informações de memória e localizar o principal trocador.

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

Editado: algum usuário anônimo viu que esta última linha de comando precisava ser aprimorada, porque obviamente a variante original não funcionava mais. Então, muito obrigado quem você é e lamento que sua edição tenha sido rejeitada. (O primeiro comando leu anteriormente 'ps xa' e resultou na falha do vmmap devido ao título do ps ser lançado nele)

Melhorias adicionais: se você deseja 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 filtrar determinados nomes de programas ou componentes do caminho da linha de comandos. Aqui, examinamos todos os processos da 'Library / PrivateFrameworks' apenas por exemplo.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
Andreas
fonte
Recebo muitas falhas dizendo que o vmmap não pôde ser iniciado como um processo de 32, mas que interrompe o xargs. Para conseguir cartões para continuar, eu fiz ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Ele ainda não para em ctrl + c, mas também não para em erros de vmmap.
ShadSterling
0

Abra o Activity Monitor na sua pasta / Aplicativos / Utilitários e há uma coluna Memória virtual que informará isso. Você pode clicar no cabeçalho da memória virtual para classificar por mais ou menos usado pelo aplicativo. Também certifique-se de alterar Meus processos para Todos os processos e saiba 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".

ridogi
fonte
4
Isto é errado. A coluna nubmer na memória virtual é uma soma de memória atualmente na RAM e no swap, arquivos mmaped e não sei mais o que.
Tadeusz A. Kadłubowski 18/01/10
Você tem certeza? A Apple não menciona isso support.apple.com/kb/TA20517
ridogi
1
O número da VM mede a quantidade alocada, mas ainda não usada. Os arquivos de troca terão o que é realmente usado.
Chealion
@ Chealion: como você define a memória que é alocada, mas não é realmente usada?
Tadeusz A. Kadłubowski
@tkadlubo: Nesse caso, acredito que é apenas a discrepância entre o tamanho da VM indicado disponível para um processo e as páginas reais, paginadas em disco. Não sei como defini-lo além de observar que o número da VM e os arquivos de troca no disco são diferentes.
Chealion
0

Como disse o ridogi, abra o Activity Monitor. Navegue até o processo que deseja inspecionar e clique em ... Inspecionar! Depois clique na memória; isto lhe dirá quanto swap o processo fornecido está usando.

Diverta-se!

trolle3000
fonte
3
A página de inspeção mostra todos os tipos de coisas interessantes correlacionadas positivamente com a resposta da pergunta, como #pagefaults, #pageins e a lista de arquivos mapeados no mapa, mas em nenhum lugar a resposta real para a pergunta que estou procurando.
Charles Stewart