Existe uma maneira de limitar a memória que um processo usa no Win7 x64?

5

Acho que o Linux pode fazer isso usando ulimit, estou procurando algo semelhante no Win7 x64. O problema é que, algumas vezes, um processo não sabe que a memória física já está esgotada e continua a alocar memória, o que atrasará o sistema para um rastreamento, já que o sistema está alocando a partir do arquivo de paginação. A única maneira de recuperar é a reinicialização difícil.

Obrigado

    
por jimjxr 02.11.2010 / 12:27

3 respostas

3

Existe o Gerenciador de recursos de sistema do Windows , mas este aplica-se apenas ao Windows Server 2008.

Em geral, isso NÃO é uma boa ideia - o arquivo de página deve ser usado. A maioria dos processos não conhece o limite de sua memória física, nem deveria ser obrigada a se importar. Parece que você deve limpar programas usando os recursos ou investir em mais memória - 4 GB é bastante normal hoje em dia, e mais é melhor.

    
por 03.11.2010 / 03:52
2

Parece que não há uma maneira nativa de fazer isso, mas, mais uma vez, o M $ trata seus usuários como idiotas incompetentes que não deveriam ter permissão para realizar tarefas que poderiam tornar o sistema inteiro mais estável ou produtivo.

A única solução alternativa pode ser o que foi sugerido para executar um script em lote em segundo plano (tecnicamente, o script é escrito e executado não oficialmente por outra parte), mas isso não "limitaria" o processo por mas em vez disso, reinicie o processo quando atingir o limite máximo que você impõe.

Os problemas com um script de reinicialização que você deve considerar são:

  1. Você estará eliminando o processo inesperadamente, o que significa que será interrompido em qualquer tarefa que estivesse realizando.

  2. Arquivos corrompidos podem ser gerados se um arquivo estiver sendo gravado para quando o processo é reiniciado. Isso pode ser aliviado se o processo tem sua própria verificação de arquivo e reescreve contingências (como jogos online e Steam).

  3. Outros subprocessos e encadeamentos também serão eliminados como resultado e poderia propagar os outros problemas listados aqui.

  4. Se o processo consome RAM rapidamente, reiniciando o processo pode ocorrer com muita freqüência, tornando o processo inútil (arquive relatório de bug crítico e parar de usar o software).

  5. Embora o processo de software esteja passando por um processo não intencional vazamento de memória, é possível que o processo tenha uma política interna de comportamento quando o sistema está baixo / esgotado na RAM, como quando acaba usando o arquivo de paginação. Se mudar seu comportamento para reduzir sua pegada, neste caso, reiniciar o processo garante que nunca entrar nesse tipo de estado "reduzido" de operação.

Outra razão pela qual a equipe do Linux acertou as coisas, mas, infelizmente, o Windows tem o suporte do mundo em drivers e jogos primeiro, então temos que sobreviver a ele.

BTW, eu pessoalmente experimentei um vazamento de memória MASSIVE no processo Razer GameScannerService.exe, onde da minha memória de 16GB de 1800MHz (e minha CPU de 5GHz), em poucos minutos ele já alocou quase 2GB de RAM, e eu vi subir até 9GB se eu permitisse.

O Razer não faz nada para consertar isso, apesar do grande número de relatórios de erros. Nossa única opção é desativar o serviço de alguma forma e viver sem a nossa capacidade de ter perfis de aplicação automática da Razer para jogos ou descobrir novos jogos que são instalados.

    
por 05.12.2017 / 18:23
1
  • No Win7, abra msconfig e, em seguida, Boot painel = > Advanced options = > verifique Maximum memory e defina o limite na caixa de texto abaixo da caixa de seleção = > Reiniciar. Isso limita o uso total de memória.

  • Outra maneira é executar um script em lote em segundo plano, monitorar os usos de memória dos processos e eliminá-lo se ele consumir muita memória.

Eu tive um processo indesejado (ele faz o download de muitos anúncios) consumindo muita memória (sempre iniciado por outro programa que eu uso com frequência). Aqui está o script bat que eu monto e fecho automaticamente.

@echo off
set prog="XXXX.exe"
:1
SET found=1 
(tasklist /FI "username eq <your username>" | find %prog% || set found=0) >nul 2>nul
if %found% EQU 1 (taskkill /f /im %prog%)
ping 0.0.0.1 -n 600 >nul 2>nul
goto 1

Alguém pode estendê-lo para monitorar qualquer processo.

  • Se você escreveu seu próprio programa, pode utilizar a API de objetos de trabalho

    A job can enforce limits such as working set size, process priority, and end-of-job time limit on each process that is associated with the job. If a process associated with a job attempts to increase its working set size or process priority from the limit established by the job, the function calls succeed but are silently ignored. A job can also set limits that trigger a notification when they are exceeded but allow the job to continue to run.

por 29.08.2016 / 16:42