Árvore de páginas

 

 

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

Este artigo aplica-se aos produtos da TOTVS | Platform (TOTVS | Application Server e TOTVS | DBAccess) e da plataforma TOTVS Tec (TOTVS Application Server e TOTVSDBAccess) em sistemas operacionais Linux 32 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 Linux.
  • Detalhes para obter a memória em uso por processos do equipamento utilizando o comando top no Linux.

 

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.

O Linux é um sistema operacional com memória virtual paginada, isto quer dizer que podemos ter programas em execução cujo tamanho é maior que a memória física disponível para executá-los. O sistema operacional passa a ser responsável por manter na memória as partes dos programas efetivamente em uso, deixando o resto no disco rígido através de memória swap (memória virtual). A utilização da memória virtual torna o computador mais lento, embora faça com que ele aparente tenha mais memória RAM do que realmente tem.

No Linux, a memória funciona com prioridade para processos que estão em execução. Quando um processo termina, havendo espaço na memória, o sistema mantém resíduos desse processo na memória para que uma possível volta ao processo seja mais rápida. Caso essa memória RAM esteja lotada com processos que estão em execução, faz-se uso da memória swap.

Cada processo do Linux, em uma máquina de 32 bits, dispõe de 3GB de espaço de endereçamento virtual para si próprio, com 1GB restante reservado para suas tabelas de páginas e outros dados do núcleo.

 

Paginação e proteção

O espaço de endereçamento virtual é dividido em áreas ou regiões organizadas em páginas. Contíguas e homogêneas. Isso quer dizer que cada área consiste de uma série de páginas consecutivas com proteção e propriedades de paginação idênticas. O segmento de código e os arquivos mapeados são exemplos de áreas. Podem haver vazios no espaço de endereçamento virtual entre essas áreas. Qualquer referência à memória para um vazio resulta em uma falha de página fatal. O tamanho de página é fixo.

Para a proteção existe um gerenciador de memória virtual evitando que processos no modo Kernel e no modo User se misturem.

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 “top” do Linux. Através dessa aplicação, é possível localizar o processo pelo nome do executável e verificar a quantidade de memória utilizada.

  1. Abra um terminal no Linux e digite o comando “top”.
    Será apresentada a coluna SHR e %MEM ao lado da coluna %CPU.
    Observe:



    Neste exemplo, verifique que o dbaccess e o dbmonitor, no momento, consomem 4MB e 5,5MB de memória disponível.

 

Memória RAM

Ao contrário do que se imagina, a informação apresentada na coluna SHT, do top do Linux, não significa que a memória alocada seja efetivamente virtual; ou seja, memória alocada em disco. A informação apresentada, no top do Linux, indica a quantidade de memória endereçada pelo processo.

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 do servidor.

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 (swap).

Desta forma, o sistema operacional permite utilizar grandes áreas de memória, porém será feito swap com o disco para emular a memória física deixando o equipamento e as aplicações em uso muito lento.

 

Limite apurado em teste de carga

Sistema Operacional / Equipamento

Suse Linux Enterprinse Server 11 / 4 GB de memória RAM

Aplicação

TOTVS | DBAccess com múltiplos processos de abertura de tabelas provenientes de um programa específico de carga.

Teste

Monitoramento da memória utilizada pela aplicação através da aplicação top no Linux.

Análise

Ao atingir os 3GB de memória alocada (tamanho da SHR do processo), não era possível alocar mais memória. A aplicação reproduziu ocorrências de Memory Full e outras subsequentes, como String Index Out of Bounds. A partir deste momento, uma vez que houve falha de alocação de memória, a aplicação torna-se instável e sujeita a outras ocorrências como congelamento de conexões em processo, congelamento de novas tentativas de conexão e queda do aplicativo.

Conclusão

Neste ambiente, é seguro trabalhar com um serviço das plataformas TOTVS Tec e TOTVS | Platform que consumam menos de 3 GB de RAM. Desta forma, teríamos uma margem de memória para situações de pico.

 

Considerações sobre balanceamento de carga

Recomendamos o uso dos sistemas de gestão (Microsiga Protheus, Logix e etc) com balance (Balanceamento de Carga), quando se tem uma demanda de usuários e aplicações que necessitem 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 para balanceamento 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ários conectados nos slaves.

 

Utilização dos produtos em Linux 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 Linux 64 bits, como por exemplo o Suse Linux Enterprise x64.

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

Em termos práticos, o teste de carga realizado apresentou falha de alocação de memória quando o processo do TOTVS | DBAccess atingiu 4GB de memória alocada, sendo segura a execução do aplicativo com menos de 4GB.

 

Visão geral - Limites reais de endereçamento

Com os testes realizados com o Suse Linux Enterprise 11 e com o Suse Linux Enterprise 11 x64, a tabela abaixo ilustra as diferenças de comportamento e limites encontrados em cada um dos ambientes.

Sistema OperacionalLinux 32 bitsLinux 64 bits
Total4 GB4 GB
Apurado/Real3.07 GB4 GB
Limite Seguro< 3 GB< 4 GB

 

Área de SWAP

Mesmo com o aumento da eficiência da multiprogramação e, particularmente, da gerência de memória, muitas vezes um programa não podia ser executado por falta de uma partição livre disponível. A técnica de swapping foi introduzida para contornar o problema da insuficiência de memória principal.

O swapping é uma técnica aplicada à gerência de memória para programas que esperam por memória livre para serem executados. Nesta situação, o sistema escolhe um processo residente, que é transferido da memória principal para a memória secundária (swap out), geralmente disco. Posteriormente, o processo é carregado de volta da memória secundária para a memória principal (swap in) e pode continuar sua execução como se nada tivesse ocorrido.

 

  • Sem rótulos