locked
App 32 bits usando mais de 2 gB de RAM RRS feed

  • Pergunta

  • Pessoal, boa tarde!

    Tenho o seguinte ambiente: Windows Server 2003 Datacenter SP2 32 bits com 12 gB de RAM rodando uma aplicação que carrega cerca de 110.000 imagens na memória RAM. Essa quantidade de imagens faz com que essa aplicação consuma, ao iniciar, 1,95 gB de RAM, e as vezes durante algum processamento, chega nos 02 gB, travando a aplicação. Dei uma pesquisada na internet e encontrei o parâmetro /3GB no boot.ini. As documentações dizem, resumindo: O padrão do Windows é usar 02 gB para aplicação e 02 gB para o SO. Adicionando o parâmetro /3GB, o Windows usará 3 gB para aplicação e 01 gB para o SO.

    Minha dúvida: Se eu tenho 12 gB de RAM, como o sistema se comportará? Permitirá que eu use até 03 gB para uma aplicação, mas e os 09 gB restante? Como devo deixar o arquivo de paginação - gerenciado pelo Windows ou defino valores manuais?

    Obs. esse servidor é dedicado para essa aplicação.

    Obrigado!

    Ricardo

    terça-feira, 20 de janeiro de 2015 16:41

Respostas

  • Sendo bem claro e objetivo quanto a este assunto...

    Existem mitos, diversos erros de interpretação com relaçao aos switches /3G, /PAE, etc. e como estes se comportam ao serem introduzidos como solução no sistema operacional.

    Primeiro, se você tem um sistema operacional x86 que suporta mais do que 4GB de memória RAM (Windows Server 2003 Enterprise/Data Center Edition) por padrão e possui mais do que 4GB de memória RAM disponível, utilizar o switch /3G para permitir que um processo de 32-Bits enderece 3GB em User Mode não é uma solução.

    Segundo, se você tem uma aplicação 32-Bits utilizando o switch /3G não significa que você poderá endereçar mais do que 3GB de memória RAM e se a aplicação utilizar mais do 3GB, você sofrerá da mesma forma ao atingir este limite.

    Para resolver este tipo de problema literalmente, você precisa pensar não somente na arquitetura do sistema operacional, mas também na arquitetura de aplicações 32-Bits e como estas utilizam memória RAM.

    Outro detalhe, o switch /PAE não tem ligação nenhuma com o /3G e a finalidade do mesmo é para o Kernel Mode do sistema operacional, ou seja, irá permitir, caso a versão não enderece por padrão acima dos 4GB, que isto seja feito.

    No entanto, como já dito anteriormente, algumas versões do Windows Server 2003 x86 já endereçam memória RAM acima dos 4GB por padrão. 

    Minha opinião é que você comece a pensar em migrar para um sistema operacional x64 e também utilizar uma versão da aplicação 64-Bits, pois somente desta forma você fará um uso melhor de memória RAM.

    Migrar para um sistema operacional x64 e continuar utilizando uma aplicação 32-Bits resultará no mesmo problema, com apenas uma diferença: se o processo utilizar a flag IMAGE_FILE_LARGE_ADDRESS_AWARE definida, ele usará até 4GB do Address Space.

    Em sistemas operacionais x64, processos 64-Bits que fazem uso da flag IMAGE_FILE_LARGE_ADDRESS_AWARE definida o padrão é 8TB de memória RAM. Para o Windows 8.1/Windows Server 2012 R2 é de 128TB.

    terça-feira, 20 de janeiro de 2015 21:59

Todas as Respostas

  • Ricardo, boa tarde!

    Isso tem haver com a memória no modo user e kernel, da uma olhada nesse link:

    http://msdn.microsoft.com/en-us/library/windows/hardware/hh439648%28v=vs.85%29.aspx


    Diogo Molina MCP, MCSA, MCSE, MCTS, MCITP, MCT. Ajude manter o forum organizado, se util classifique! Http://diogomolinadesa.org

    terça-feira, 20 de janeiro de 2015 17:19
  • Boa tarde Diogo.

    Chegue nesse link e em outros, mas não consegui tirar de forma clara as dúvidas que postei.

    Obrigado.

    Ricardo

    terça-feira, 20 de janeiro de 2015 18:17
  • O que acontece é que quando você adiciona o /PAE no boot.ini e realizada uma especie de extensão dentro do Kernel para permitir a utilização maior do que os 4GB, ele faz uma extensão de 32 bits para 36 bit para poder endereçar mais do que 4GB.

    É um assunto um pouco complicado de entender, não sei se deu para entender, não sei se já viu o link abaixo, mais ele explica com detalhe como funciona essa extensão.

    http://technet.microsoft.com/pt-br/library/cc668496.aspx


    Diogo Molina MCP, MCSA, MCSE, MCTS, MCITP, MCT. Ajude manter o forum organizado, se util classifique! Http://diogomolinadesa.org

    terça-feira, 20 de janeiro de 2015 18:28
  • Um cliente já teve uma dúvida parecida e o link do Diogo ajudou a tirá-la;

    Wellington Agápto
    Cloud Architect and Team Leader | Office 365 and Azure Solutions
    ITIL, CCNA, MCP, MTA, MCITP, MCTS, MCSA, MCSA Office 365, MCSE Communication | Messaging
    Blog: http://www.wellingtonagapto.org 

    terça-feira, 20 de janeiro de 2015 18:32
  • Sendo bem claro e objetivo quanto a este assunto...

    Existem mitos, diversos erros de interpretação com relaçao aos switches /3G, /PAE, etc. e como estes se comportam ao serem introduzidos como solução no sistema operacional.

    Primeiro, se você tem um sistema operacional x86 que suporta mais do que 4GB de memória RAM (Windows Server 2003 Enterprise/Data Center Edition) por padrão e possui mais do que 4GB de memória RAM disponível, utilizar o switch /3G para permitir que um processo de 32-Bits enderece 3GB em User Mode não é uma solução.

    Segundo, se você tem uma aplicação 32-Bits utilizando o switch /3G não significa que você poderá endereçar mais do que 3GB de memória RAM e se a aplicação utilizar mais do 3GB, você sofrerá da mesma forma ao atingir este limite.

    Para resolver este tipo de problema literalmente, você precisa pensar não somente na arquitetura do sistema operacional, mas também na arquitetura de aplicações 32-Bits e como estas utilizam memória RAM.

    Outro detalhe, o switch /PAE não tem ligação nenhuma com o /3G e a finalidade do mesmo é para o Kernel Mode do sistema operacional, ou seja, irá permitir, caso a versão não enderece por padrão acima dos 4GB, que isto seja feito.

    No entanto, como já dito anteriormente, algumas versões do Windows Server 2003 x86 já endereçam memória RAM acima dos 4GB por padrão. 

    Minha opinião é que você comece a pensar em migrar para um sistema operacional x64 e também utilizar uma versão da aplicação 64-Bits, pois somente desta forma você fará um uso melhor de memória RAM.

    Migrar para um sistema operacional x64 e continuar utilizando uma aplicação 32-Bits resultará no mesmo problema, com apenas uma diferença: se o processo utilizar a flag IMAGE_FILE_LARGE_ADDRESS_AWARE definida, ele usará até 4GB do Address Space.

    Em sistemas operacionais x64, processos 64-Bits que fazem uso da flag IMAGE_FILE_LARGE_ADDRESS_AWARE definida o padrão é 8TB de memória RAM. Para o Windows 8.1/Windows Server 2012 R2 é de 128TB.

    terça-feira, 20 de janeiro de 2015 21:59
  • Primeiro, se você tem um sistema operacional x86 que suporta mais do que 4GB de memória RAM (Windows Server 2003 Enterprise/Data Center Edition) por padrão e possui mais do que 4GB de memória RAM disponível, utilizar o switch /3G para permitir que um processo de 32-Bits enderece 3GB em User Mode não é uma solução.

    Achei que era para isso que ele servia.

    Segundo, se você tem uma aplicação 32-Bits utilizando o switch /3G não significa que você poderá endereçar mais do que 3GB de memória RAM e se a aplicação utilizar mais do 3GB, você sofrerá da mesma forma ao atingir este limite.

    Não preciso de mais de 03 gB, mas 03 gB. Minha app está atingindo 02 gB e travando. Preciso de um "quebra galho".

    Para resolver este tipo de problema literalmente, você precisa pensar não somente na arquitetura do sistema operacional, mas também na arquitetura de aplicações 32-Bits e como estas utilizam memória RAM.

    Impossível no momento. A app deverá ser reescrita e outros projetos impedem isto.

    A proposito, obrigado pela resposta.

    Abs

    Ricardo




    terça-feira, 27 de janeiro de 2015 18:02
  • Você consegue determinar a quantia de dados que esta aplicação deverá lidar? Você consegue determinar qual será o volume de dados que cada usuário poderá inserir nesta aplicação?

    Se uma aplicação fizer uso de flags como por exemplo, SetProcessWorkingSetSizeEx definindo um valor máximo de memória RAM que o processo pode consumir, usar o switch /3G poderia ser considerado um "quebra galho".

    No entanto, este tipo de remendo não tem efeito algum se o usuário final inserir uma quantia de dados que precisem de mais memória RAM para ser possível o tratamento pela aplicação e neste caso, você terá o mesmo tipo de resultado: o congelamento da aplicação.

    terça-feira, 27 de janeiro de 2015 23:37