Existe uma maneira de fazer com que o OSX use mais RAM e menos troca?

12

O problema que estou enfrentando é que, em um servidor (e em outras caixas OSX), temos 4 GB de RAM, mas descobrimos que o OSX usa apenas 40-60% da RAM disponível, além de ter uma troca de 6-7 GB. O servidor está executando o Apache e o MySQL enquanto as outras máquinas são desktops.

Comparei seu uso com caixas semelhantes do Linux (hardware e software) e constatei que o Linux normalmente usa 80-90% da RAM e possui um arquivo de troca muito menor (2-3 GB). Os servidores Linux também costumam rodar muito mais rápido.

Existe uma maneira de forçar o OSX a usar mais ou a maior parte da RAM antes de usar um arquivo de troca de disco?

No Windows, você pode realmente desativar a troca completamente. Existe algo semelhante para o OSX?

Darryl Hein
fonte
Para esclarecimentos: 1. O gargalo é o sistema VM? Como quando você vê as estrelas da memória, há uma grande quantidade se ocorrerem paginações. 2. Onde você está obtendo suas informações de tamanho Free e VM? Por exemplo, o tamanho da VM indicado no Activity Monitor não é igual ao tamanho do arquivo de troca.
Chealion
Não tenho provas de que o sistema da VM (VM ou swap) é o problema, mas sei que na minha área de trabalho tenho 6 GB de RAM, dos quais geralmente 2-3 GB geralmente são gratuitos. Quando troco de programa, você acha que seria muito rápido porque está tudo na RAM, mas, em vez disso, leva de 2 a 15 segundos para voltar para algo como o Illustrator. Estou pensando que coisas semelhantes estão acontecendo no servidor - algo como o armazenamento em cache para MySQL ou tabelas temporárias. Estou usando o top para determinar o uso da VM, RAM e swap. Alguma ideia?
Darryl Hein
3
Para determinar o uso real da vm, o mais fácil é executar du -sh /var/vm- o que significa que pode ser artificialmente alto se houver uma imagem do sono (mais frequentemente vista em laptops) presente. Existem várias ferramentas disponíveis que podem ajudá-lo a determinar se a memória está causando lentidão: vm_stat- particularmente você está interessado no valor das paginações - se aumentar um pouco, então você saberá que está trocando bastante. Para obter mais informações sobre como a Apple gerencia sua memória: developer.apple.com/documentation/Performance/Conceptual/…
Chealion

Respostas:

17

O mais básico de resposta? Não. O sistema operacional lida com o gerenciamento de memória para o usuário - fornecendo ao processo a quantidade de memória necessária e solicitando e não fornece muito em termos de poder modificar o desempenho do sistema. Não ajuda muito tentar descobrir se a utilização da memória faz parte da equação do motivo pelo qual os servidores Linux estão superando os servidores Mac.

Devido à falta de "hackability" no sistema de memória virtual, suas melhores opções são avaliar o desempenho da memória virtual para ver se é realmente o motivo pelo qual você está tendo problemas de desempenho - o mais básico é usá-lo vm_statou segui-lo ao vivo usando vm_stat [number of seconds]para ver quantas páginas estão ocorrendo. Mover páginas não utilizadas da RAM para o disco rígido tem um custo muito mais baixo do que recuperar as páginas do disco rígido para a RAM. Uma página nos termos do OS X refere-se a 4kb de dados.

Além disso, processos de 32 bits (por exemplo, Illustrator) não podem acessar mais de 4 GB; portanto, é teoricamente possível ter 2 GB livres e um processo ficar sem memória se você tiver 6 GB instalados.

Tanto na área de trabalho quanto nos servidores, eu executaria vm_stat 2e verificaria a última coluna - especialmente quando ocorrer um atraso de vários segundos ao mudar para o Illustrator.

Para descobrir qual o tamanho real da troca, você pode verificar o tamanho da troca no Activity Monitor ou executar du -shc /var/vm/swap* | tail -n 1.

O uso du -sh /var/vmtem uma ressalva: em laptops que têm o modo de hibernação (qualquer coisa nos últimos 4 anos ou mais recentes), pode haver sleepimageaproximadamente o tamanho de quanta memória você instalou.


Jargão de memória do Mac OS X:

Com fio : refere-se ao código do kernel e tal. Memória que nunca deve ser removida da RAM. Também conhecida como memória residente.

Shared : Memória compartilhada entre dois ou mais processos. Ambos os processos mostrariam essa quantidade de memória, de modo que pode ser um pouco enganador quanto à quantidade de memória realmente usada.

Real : esse é o uso de memória "real" para um aplicativo, conforme relatado por task_info () - uma contagem aproximada do número de páginas físicas que o processo atual possui. (RSIZE)

Privada : é a memória que um processo está usando por si só e usada na memória residente. (RPRVT)

Virtual : a quantidade total de espaço de endereço no processo mapeado para qualquer coisa - seja um espaço arbitrariamente grande para variáveis ​​ou qualquer coisa - não equivale ao uso real da VM. (VSIZE)

Ativo : Memória atualmente rotulada como ativa e é usada RAM.

Inativo : "A memória inativa não está mais sendo usada e foi armazenada em cache no disco. Ela permanecerá na RAM até que outro aplicativo precise do espaço. Deixar essas informações na RAM é vantajosa se você (ou um cliente do seu computador) voltar mais tarde. " - Ajuda do Mac OS X

Livre : a quantidade de RAM realmente disponível sem nenhum dado.


A melhor documentação que eu conheço (e consegui encontrar na pesquisa de acompanhamento) é o artigo de gerenciamento de memória da Apple no site do desenvolvedor.

Outras fontes que valem a pena: lista de discussão de Darwin-dev: [ 1 ], [ 2 ] e um artigo antigo no MacOSXHints . Além disso, Mike Ash publicou uma introdução de um bom leigo em seu blog


Pode ser possível (eu ainda não tentei) desativar o sistema de memória virtual executando sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.pliste reiniciando para que dynamic_pager (o programa que realmente faz a alocação de memória virtual) não seja iniciado. No entanto, como o sistema operacional pressupõe que ele possui memória virtual, você pode se deparar com problemas muito, muito rapidamente. Para carregá-lo novamente, execute sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist(se necessário no modo de usuário único)

Chealion
fonte