Consumo de memória de aplicações de 32 bits

Este artigo aplica-se a execução dos produtos TOTVS (TOTVS | Application Server e TOTVS | DBAccess), em sistemas operacionais Windows Server 2003 (ou superior) 32 bits e 64 bits.



A seguir, abordaremos as seguintes informações:

  • Limite de alocação de memória e endereçamento de aplicações 32 bits.
  • Detalhes sobre o gerenciamento de memória física (RAM - Random Access Memory) e virtual (paging file) do Windows.
  • Detalhes para obter a memória em uso por processos do equipamento utilizando o gerenciador de tarefas do Windows (Task Manager).
  • Limite do uso de memória quando utilizado o parâmetro de Kernel/3GB com Windows 32 bits e executando a aplicação em Windows 64 bits.

Limite de memória em 32 bits

Existem alguns aspectos importantes que devem ser considerados sobre o consumo de memória de uma aplicação 32 bits.

Desta forma, é importante ressaltar que a arquitetura de x86/32 bits tem uma limitação importante para endereçamento e alocação de memória RAM. Pois, a arquitetura de 32 bits pode endereçar nativamente no máximo 4 GB de memória RAM (232=4.2 bilhões ~ 4 GB).

Endereçamento de memória

Ao utilizar o sistema operacional Windows 32 bits, com endereçamento de 4 GB de memória, 2 GB é reservado para o funcionamento do Kernel e o restante (2GB) ficam disponíveis para processos e aplicações do usuário em execução no equipamento.

Como o processo utiliza a memória de forma contínua, e o próprio processo de alocação utiliza uma parte da memória para controle interno, uma instância de um processo consegue endereçar aproximadamente 1.8 GB de memória. No entanto, esses números são aproximados, não há uma métrica precisa.

Já o limite de endereçamento real da aplicação é um pouco abaixo disso, pois a memória exigida para armazenar o programa e a pilha de execução (Stack), alocadas internamente pela aplicação, também são contabilizadas nesse limite.

Desta forma, o TOTVS | Application Server e o TOTVS | DBAccess, quando executados em uma máquina de 32 bits, entram nesse limite de endereçamento de memória.

Verificando a memória alocada por um processo

Para determinar a quantidade total de memória física ou não alocada e endereçada por um processo, pode-se utilizar a aplicação do Gerenciador de tarefas do Windows (Task Manager).
Através dessa aplicação, é possível localizar o processo pelo nome do executável e verificar a quantidade de memória utilizada.

  1. Na janela Gerenciador de tarefas do Windows, clique na pasta Processos.
  2. No menu Exibir, selecione a opção Selecionar Colunas.
  3. Na janela Selecionar Colunas, marque a opção Memória - Tamanho da confirmação (Memory - Commit Size) - em versões mais antigas será a opção Tamanho da VM (VM Size) -  e clique no botão OK. Será apresentada a coluna. Observe:



    Neste exemplo, verifique que o TOTVS | Application Server (Appserver.exe), no momento, consome 326.940 KB (aproximadamente 327 MB).

Memória RAM e Paging File

A informação apresentada na coluna Commit Size, do Gerenciador de Tarefas (Task Manager) do Windows indica a quantidade de memória em KB endereçada pelo processo não somente em memória RAM física, mas também em memória no disco. O fator que determina a partir de um momento se parte dessa memória está endereçada em disco, é a disponibilidade da memória física no equipamento, ou seja, a quantidade efetiva de memória RAM da máquina.

Para isso, o Windows cria um arquivo em disco, chamado paging file ou swap file, para armazenar parte do programa e memória alocada no disco quando as alocações de memória da aplicação não cabem na memória física (RAM) disponível.

Exemplo

Uma máquina de 1 GB de RAM, com paging file de 1 GB, tem uma área de endereçamento total de 2 GB. Conforme as aplicações em execução vão alocando memória, é priorizada a alocação da RAM. Mas, quando o total de memória RAM alocada se aproxima de 1 GB e as aplicações pedem mais memória, parte do conteúdo da memória física já alocada por uma aplicativo são transferidas para o paging file, e mais memória RAM é liberada.

Quando um aplicativo solicita um conteúdo de memória anteriormente alocado, e caso não esteja no disco, outra área da memória alocada será transferida para o disco e o conteúdo solicitado será lido do disco para a RAM, para ser usada pela aplicação. 

Configurando o tamanho do paging file

Independentemente da quantidade de memória física (RAM) disponível, deve-se ter o paging file habilitado, como medida de segurança, principalmente se o equipamento possui muita memória RAM. Pois, caso exista um excesso de consumo de memória por um ou mais aplicativos juntos, e a memória RAM for completamente ocupada, e o recurso de paging file não estiver configurado/disponível, o sistema operacional cairá imediatamente (crash).

O desempenho com o paging file habilitado não representa nenhum problema, pois as alocações de memória são priorizadas para uso de memória física (RAM).

 

Não recomendamos desligar o uso do paging file do Windows.

 

O paging file/swap sempre são alocados e administrados pelo Windows de acordo com as alocações e sua utilização de blocos de memória. Por isso, recomendamos manter as configurações do paging file utilizando as configurações sugeridas pelo sistema operacional (System Managed Size). Desta forma, o sistema operacional deve criar o arquivo de paging file com o tamanho correspondente a memória física disponível.

  1. No Painel de Controle + Propriedade do sistema, clique na pasta Avançado.
  2. Na área Desempenho, clique Configurações.
  3. Na janela Opções de desempenho, clique na pasta Avançado.
  4. Na área Memória Virtual + botão Alterar, é possível definir as propriedades de uso e comportamento do sistema em relação ao paging file.

 

Monitor de desempenho do gerenciador de tarefas do Windows (Task Manager)

Através Gerenciador de tarefas do Windows, na pasta Desempenho, é possível obter as seguintes informações e comportamentos de um equipamento:

 

Neste exemplo, o equipamento em questão está com paging file configurado com capacidade 672 MB.

  • Memória Física (KB) / Physical Memory (K)
    Nesta área, são apresentados os seguintes dados:
    457964 KB – Total de memória RAM
    178224 KB (174 MB) - Total de memória disponível
    183956 KB - Total de memória utilizada para o cache do sistema operacional
     
  • Memória usada pelo núcleo (KB) / Kernel Memory (K)
    36920 KB – Total de memória em uso pelo Kernel
    28645 KB – Total de memória utilizada pelo arquivo de paginação (Paged)
    8272 KB – Efetivamente memória RAM (Nonpaged)
     
  • Carga comprometida (KB) / Commit Charge (K)
    Nesta área, são apresentados os totais de memória RAM incluindo o paging file.
    252400 KB ou 246 MB – Total de memória alocada no momento. Essa informação é apresentada também na área Uso do arquivo de paginação e é mais significativa para análise.
    1083052 KB (1057 MB) – Limite de memória endereçável do ambiente (RAM + Paging File).
    425172 – Apresenta o pico (valor máximo) alocado para o servidor desde que foi iniciado.

Em geral, um ambiente configurado para utilização de memória virtual através do arquivo de paginação (Paging File), quando a quantidade total de memória alocada (Carga comprometida ->Total ou Uso do arquivo de paginação) atinge a quantidade de memória física total (Memória Física ->Total), o sistema operacional já está utilizando o paging file como memória adicional.
Nesse caso, a perda de performance/desempenho tende a crescer, de acordo com o crescimento da memória total alocada, e a quantidade de operações de memória realizadas pelos aplicativos em setores da memória gravada no disco.

Desta forma, o sistema operacional permite que sejam manipulados quase 1 GB de memória, porém, a partir dos 450 MB utilizados, o paging file será utilizado para emular a memória física deixando o equipamento e as aplicações em uso muito lento.

TOTVS | Application Server - Considerações sobre balanceamento de carga

Recomendamos o uso dos ERPs Microsiga Protheus e Logix com balance (Balanceamento de Carga), em casos quando se tem uma demanda de usuários e aplicações que necessite mais do que o limite operacional, pois assim cada serviço slave terá o limite de endereçamento de cada servidor utilizado. Inclusive, se houver memória e capacidade de processamento (CPU), pode-se configurar mais de um serviço no mesmo equipamento.

O balanceamento de carga é utilizado com eficácia para conexões do  TOTVS | SmartClient, em que as novas conexões são direcionadas aos servidores slaves de acordo com o fator de carga de cada servidor, configurado no balance, e a quantidade de usuário conectado nos slaves.

Obs: Nas atualizações mais recentes, não existe a necessidade de habilitar esse parâmetro, pois já vem configurado por padrão.

Existem ambientes, por exemplo o uso do TOTVS | Application Server, com servidor HTTP, para portais ou sites Web, em que a quantidade de usuários conectados pode exigir uma demanda de memória maior e a configuração de balanceamento de carga, do ERP, não se aplica a interface WEB/HTTP.

Nestes casos e similares, existem algumas alternativas de configuração especifica de memória para o Microsoft Windows, que permite aumentar o limite de memória alocada para aplicativos de 3 GB. No entanto, algumas versões do Windows 32 bits, permitem o gerenciamento e endereçamento de mais de 4 GB de memória física, utilizando uma máquina com arquitetura x86_64, juntamente com uma versão do Windows nativa para 64 bits, no qual temos um limite maior, mesmo para aplicações compiladas em 32 bits.

Por exemplo, utilizar um Windows Server 2003 Enterprise x64, onde a aplicação 32 bits é executada sem necessidade de compilação ou build nativo, e o ambiente permite o endereçamento de até 4 GB por aplicação, sem nenhuma alteração de configuração no sistema operacional.

Porem, é possível a utilização do parametro /PAE - Physical Address Extension. Através deste parâmetro, inserido na configuração de inicialização do Windows, é possível habilitar no sistema operacional o suporte a endereçamento e identificação de mais de 4 GB de memória física (RAM), criando uma camada de endereçamento transparente para as aplicações.

Para mais informações das versões do Windows que suportam esse parâmetro, consulte a documentação do Suporte Microsoft, através do endereço: http://support.microsoft.com/kb/283037//en-us.

Para ambientes com Windows 2000 ou 2003 – 32 bits, com mais de 4 GB de RAM, é recomendável que o recurso PAE seja utilizado para que o sistema operacional seja capaz de reconhecer a quantidade adicional de memória.


Utilização do TOTVS | Appserver 32 bits em Windows 64 bits

 

Ao compilar a aplicação para modo nativo 32 bits, a mesma é executada sem nenhum demérito ou perda de desempenho em uma máquina 64 bits, utilizando uma versão de Windows 64 bits, como por exemplo o Windows Server 2003 Enterprise x64.

Para execução de aplicações de 32 bits, em Windows 64 bits, o sistema operacional executa a aplicação através de um subsistema chamado WOW64 (Windows on Windows 64), que realiza a adequação necessária para executar a aplicação 32 bits de modo transparente para a aplicação, disponibilizando ainda de forma nativa DLLs específicas do sistema operacional em pasta diferenciada para manter a compatibilidade com programas compilados e linkeditados para utilização de recursos do sistema operacional Windows em 32 bits.
Para obter mais informações detalhadas, consulte a documentação do suporte Microsoft no endereço: http://support.microsoft.com/kb/896456/en-us.

Neste ambiente, o sistema operacional permite à aplicação a alocação de 4 GB de memória por processo 32 bits.

 

Limites reais de endereçamento com AppServer

Consulte Testes de carga em aplicações 32 bits e 64 bits - Windows para mais informações de limites de carga no Appserver.

Visão geral - Limites reais de endereçamento com AppServer e ERP Microsiga Protheus 8

Com os testes realizados com o TOTVS | Application Server com Windows XP, Windows Server 2003 com parâmetro /3GB habilitado, e com o Windows Server 2003 Enterprise x64 Edition, a tabela abaixo ilustra as diferenças de comportamento e limites encontrados em cada um dos ambientes. Em termos práticos, o teste de carga realizado apresentou falha de alocação de memória quando o processo do TOTVS | Application Server atingiu 3.4 GB de memória alocada (Tamanho da VM), sendo segura a execução do aplicativo até os 3.1 GB.

 

Sistema OperacionalWindows XP 32 bits  Windows Server 2003 32 bits com /3GBWindows Server 2003 Enterprise Edition x64 SP2
Total2 GB3 GB4 GB
Apurado / Real 1.7 GB2.6 GB3.4 GB
Limite Seguro1.4 GB2.3 GB3.1 GB

Considerações sobre a plataforma Linux

Existem recursos similares nas plataformas Linux, com versões do Kernel 2.4 e superiores, que permitem adequações de comportamento similares aos recursos apresentados pelo Windows. No entanto, para obter mais informações desse recurso e afins, é necessário consultar os documentos que são disponibilizados no pacote de distribuição Linux.

A TOTVS S/A analisa e testa essas informações nas plataformas homologadas para, posteriormente, incluir essas características nas versões e distribuições homologadas para uso com o TOTVS | Application Server e TOTVS | DBAccess. Para maiores informações, consulte Consumo de memória de aplicações 32 bits - Linux.