Maneira de limitar a quantidade de RAM que um processo arbitrário pode ocupar?

12

Digamos que temos uma máquina OS X funcionando com 4 GB de RAM. É possível configurá-lo para que nenhum processo único possa ocupar mais do que, digamos, 3 GB, por isso, não importa o quanto a memória esteja sobrecarregando um processo, sempre haverá alguma memória restante para manter o sistema responsivo?

Fomite
fonte
6
Não. E isso seria contraproducente. Micro-gerenciar a alocação de RAM não é algo que os sistemas operacionais são projetados. RAM livre é RAM desperdiçada. Muito é feito com o suposto mau gerenciamento de RAM do OS X. Fechar o Monitor de Atividades e seguir adiante com sua vida parece ser o melhor remédio.
8
@cksum Há uma série enorme de suposições no seu comentário, a maioria das quais está errada. Não estou tentando voltar a administrar a memória do OS X. Na verdade, o que estou fazendo é tentar descobrir se há uma maneira de manter a funcionalidade do sistema suficiente ao testar algum código que facilmente se transforma em um processo descontrolado. Porque a RAM livre não é desperdiçada, se é o que permite corrigir erros.
Fomite
3
Desculpe, mas se sua pergunta está relacionada à programação (desenvolvimento e teste) de aplicativos, isso não é tópico deste fórum. Por favor, dê uma olhada no FAQ para mais informações sobre que tipo de perguntas pertencem aqui: apple.stackexchange.com/faq
10
FFS, essa não é uma questão de programação. É uma pergunta do sistema operacional. Limitar a memória que um processo arbitrário pode usar - Safari, Matlab, Call of Duty, qualquer que seja - no nível do sistema operacional é inequivocamente uma questão de sistema operacional.
Fomite
7
Ser um site para "entusiastas da Apple e usuários avançados" questões que, em essência, tratam da memória virtual estão claramente dentro dos limites e do tópico. Mesmo se o desenvolvimento estiver relacionado, isso seria válido para problemas de ajuste ou desempenho.
bmike

Respostas:

9

Uma pergunta semelhante a essa é observada aqui Como posso limitar a quantidade de RAM que um aplicativo Mac OS pode usar?

Eles recomendam o uso do comando ulimit , mas não conseguiram limitar a quantidade com sucesso ao que desejavam. Eu acho que o problema que eles encontraram foi o fato de que a opção configurada -u ou -v não era responsável pelo sistema de paginação de memória, por exemplo, você só pode alocar uma quantidade X de espaço para processar na RAM real, mas podemos paginar você fica na memória virtual o dia inteiro.

Observe que isso pode ser perigoso desabilitar a memória virtual, pode resultar no bloqueio do seu Mac, etc., quando a memória RAM for executada.

Tente executar o ulimit com os argumentos -l, -m ou -v, conforme observado na página de manual do ulimit, até o sistema operacional, se ele prestar atenção nessas configurações ou não como observado.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [limite]

Modifique os limites de recursos do shell.

Fornece controle sobre os recursos disponíveis para o shell e os processos que ele cria, em sistemas que permitem esse controle.

Não é possível realmente encontrar nenhuma fonte definida que confirme se o OS X ignora ou não o ulimit, mas após a falha do ulimit referenciado

Se você conseguir que o ulimit atenda às suas necessidades por si só, tente, se não uma combinação de ulimit e / ou desativar a memória virtual, poderá permitir que você configure esse limite de 3 GB em processos selecionados. Para sua informação, aqui está um bom link para obter mais informações sobre desativar completamente a memória virtual no Snow Leopard System 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MrDaniel
fonte
Parece a provável resposta correta - tentarei quando for executar isso em seguida. Por enquanto, aceitando a resposta.
Fomite
5

Se você estiver executando o servidor Lion (ou OSX mais recente) no seu Mac, poderá executar o OSX dentro de uma VM (VirtualBox, Parallels ou VMWare, et.al.) nesse Mac. Limite a VM a 3 GB de RAM física e qualquer aplicativo ou processo dentro da VM também será muito limitado. O sistema que hospeda a VM deve permanecer responsivo, mesmo que o SO da VM esteja com backup limitado, troca de disco ou falhas.

Se você estiver depurando um processo potencialmente descontrolado, poderá conseguir ssh na VM para executar o depurador ou um nub de depuração na linha de comando e registrar as coisas até que as coisas travem.

hotpaw2
fonte