Page tree
Skip to end of metadata
Go to start of metadata

 

 

Melhoria – Novo processo de monitoramento e controle de memória

Esta build contém um novo recurso de monitoramento de memória da aplicação TOTVS Application Server, que além de monitorar a memória em uso pelo serviço do sistema ERP, toma ações preventivas para bloquear a entrada de novas conexões das aplicações TOTVS SmartClient caso a memória em uso pelo TOTVS Application Server esteja próxima de um limite de alocação de memória definido automaticamente ou configurado explicitamente.

 

AbrangênciaERP 10

Situação

Utilização do TOTVS Application Server com ou sem balanceamento de carga.

Ocorrência

Durante a execução de programas e conexões remotas em processamento no TOTVS Application Server, as aplicações em execução utilizam a memória do equipamento de forma dinâmica, alocando blocos de memória em quantidade e tamanho necessário para a execução das aplicações.
Dependendo da plataforma (Hardware + Sistema Operacional) utilizada, existe um limite de consumo de memória, que uma vez atingido, provoca ocorrências críticas no TOTVS Application Server, descritas como "Memory Full", seguida de ocorrências de erro crítico "Access Violation".

Melhoria

A partir da build 7.00.090818P, o TOTVS Application Server possui um processo dedicado ao monitoramento de memória. Este processo identifica a existência e qual o limite de memória utilizada pela aplicação logo que o serviço é iniciado, além de verificar se foi definido um limite de alocação de memória residente para este serviço no arquivo de configuração (totvsappserver.ini) do TOTVS Application Server.

Durante a permanência do serviço ativo, este processo acompanha em intervalos de 1 segundo a memória em uso desta instância do TOTVS Application Server, tomando ações preventivas e registrando informações de análise no log de console.

Para isso, é definido um limite de alocação de memória residente, no arquivo de configuração (totvsappserver.ini) do TOTVS Application Server, na chave ServerMemoryLimit=NNNN, da seção [General], onde NNNN é o limite em MB que será considerado.

Desta forma, ao atingir 80% do limite de alocação de memória, o sistema registra uma ocorrência de advertência no log de console ([INFO ][SERVER] [MEMORY] Used memory average WARNING), do TOTVS Application Server, indicando que o status do consumo de memória do serviço está em "advertência". Atingindo 90% do limite, uma nova ocorrência de advertência é registrada ([INFO ][SERVER] [MEMORY] Used memory average FATAL), notificando que o status de uso da memória é "fatal" e que as novas conexões do TOTVS Application Server para este serviço foram automaticamente desabilitadas ([FATAL][SERVER] [MEMORY] Used memory OVER SAFE LIMIT. REMOTE CONNECTIONS ARE DISABLED). Uma vez automaticamente desabilitadas, o TOTVS Application Server somente habilitará essas conexões novamente e automaticamente se e quando a condição de utilização da memória voltar para um índice abaixo de 80% do limite.

No entanto, caso a alocação de memória continue aumentando, ao atingir e ultrapassar 95% do limite definido, uma nova ocorrência é registrada notificando que o consumo de memória atingiu o nível "crítico" ([INFO ][SERVER] [MEMORY] Used memory average CRITICAL).

Essas ações visam evitar que o serviço do TOTVS Application Server chegue a uma condição onde a execução de um programa não consiga mais alocar memória ([FATAL][SERVER] Memory Allocation Failure), pois uma vez que haja efetivamente um falha de alocação, a aplicação pode tornar-se instável e apresentar problemas de congelamento de conexões, access violation, exception stack overflow, memory full, problemas ao baixar o serviço, instabilidade e comportamentos inesperados nas aplicações e programas que ainda estão conectados e em execução neste serviço.

No ambiente com balanceamento de carga, onde por qualquer razão um serviço slave do TOTVS Application Server atingiu 90% do limite estabelecido de alocação de memória, este serviço desabilita, automaticamente, as novas conexões do TOTVS SmartClient e o serviço de balanceamento de carga (Master ou Balance) não redicionará nenhuma conexão do TOTVS SmartClient para aquele slave enquanto as conexões estiverem bloqueadas. Desta forma, nenhuma ação é tomada com as conexões que já estão em execução naquele serviço para que continuem o processamento normalmente. 

Se uma dessas conexões em processamento continuar alocando memória, fatalmente o limite estabelecido atingirá os 100% e, a partir do momento que o sistema operacional não for mais capaz de fornecer memória para o TOTVS Application Server, uma falha de alocação de memória será registrada no log de console do TOTVS Application Server com a informação de "Memory Allocation Failure (XXX Bytes)", onde XXX será a quantidade de memória solicitada que não foi atendida. Este cenário pode apresentar os seguintes comportamentos:

  • A ocorrência de falha de alocação de memória dispara uma rotina de recuperação de erro, que pode precisar de mais memória inclusive do que a tentativa de alocação. Neste caso, o serviço do TOTVS Application Server fechará, automaticamente, e derrubará todos os usuários conectados neste serviço interrompendo os processos em andamento. Além de registrar no log de console a seguinte ocorrência:[FATAL][SERVER]APPLICATION SHUTDOWN DUE UNRECOVERABLE MEMORY ALLOCATION FAILURE
    Uma falha de recuperação em tratamento de erro de alocação de memória é uma ocorrência irrecuperável e qualquer tentativa de manter o serviço no ar causaria os comportamentos já mencionados anteriormente, como o congelamento das estações e a ação final necessária inevitavelmente seria a parada do serviço para então subí-lo novamente.
  • A ocorrência de falha de alocação dispara uma rotina de recuperação, que consegue alocar memória suficiente para tratar a ocorrência. Neste caso, apenas a ocorrência crítica de falha de alocação (Memory Allocation Failure) é registrada e o processo atual que apresentou falha de alocação de memória é finalizada, liberando a memória em uso por este processo. Neste caso, havendo sucesso na geração do log de erro/ocorrência, finalização normal apenas daquele processo e com o tempo as conexões em processo forem finalizadas, quando a ocupação de memória do serviço, do TOTVS Application Server, baixar de 80% do limite, o servidor automaticamente voltará a um status seguro de ocupação de memória e permitirá novas conexões ao serviço.

No entanto, vale ressaltar que, em qualquer um dos cenários descritos, onde a ocupação de memória de um ou mais serviços do TOTVS Application Server apresentarem um estado de atenção (WARNING) ou bloqueio automático de conexões, deve-se buscar mais informações sobre a causa desta ocorrência, pois a reincidência ou agravamento de ocorrências desse tipo, podem comprometer a operabilidade do sistema.

Este mecanismo serve para apontar uma possível falha ou mal dimensionamento de ambiente dada a carga de trabalho atual, gerando um registro/log com informações de análise que permitam um diagnóstico mais preciso das ocorrências registradas no TOTVS Application Server. É imprescindível que este log juntamento com o arquivo de configuração (totvsappserver.ini) sejam fornecidos para análise quando da abertura de um chamado.

 

Novas mensagens no log de console do TOTVS Application Server

 

[INFO ][SERVER] APP Virtual Address Allocation Limit ....

Indica o limite de alocação de memória (MB) por aplicação, conforme determinado pelo sistema operacional. Ao utilizar o TOTVS Application Server em plataformas Windows, os limites podem ser de 2048 MB, 3072 MB ou 4096 MB.
Observação: Esta informação é registrada no log de console do TOTVS Application Server quando o serviço é iniciado.

 

[INFO ][SERVER] Memory Monitor Virtual Address LIMIT ....

Quando não especificado o limite de memória no arquivo de configuração (totvsappserver.ini), o TOTVS Application Server assume o limite de endereçamento virtual (APP Virtual Address Allocation Limit) como sendo o limite de alocação deste serviço em MB.
Observação: Esta informação é registrada no log de console do TOTVS Application Server quando o serviço é iniciado.


[INFO ][SERVER] Memory Monitor Resident LIMIT ...........

Quando especificado um limite de memória no arquivo de configuração (totvsappserver.ini), do TOTVS Application Server, o processo de monitoramento irá considerar o limite especificado em MB como limite de memória residente alocado pela aplicação.


[INFO ][SERVER] [MEMORY] Used memory average <STATUS>

Dados os limites especificados, quando a alocação de memória do serviço, do TOTVS Application Server, transitar entre um estado e outro, o processo de monitoramento de memória registrará a mensagem no log de console, do TOTVS Application Server, onde <STATUS> indicará a condição do processo (WARNING, FATAL, CRITICAL ou  NORMAL), acompanhado dos seguintes dados adicionais. Estes dados são internos da aplicação e servem de base para a análise da ocorrência.

Exemplo:
Neste exemplo, obtido de uma máquina que utiliza Windows em plataforma 32 Bits, em que foi configurado um limite de 1024 MB (1GB) de memória residente máxima para o TOTVS Application Server, onde o status atual é WARNING:

[INFO ][SERVER] [MEMORY] Used memory average <WARNING>

(Contadores de processos internos do TOTVS Application Server)

----------- Total Thread Count ------------
                 Total Threads ... 13
                        Thread ... 2
                       WThread ... 9
                 RmtSockThread ... 1
                    SockServer ... 1

 

(Informações de memória de uso global / interno)

----------- Global List Info --------------
                 IMAP Glb List ...        0.00 KB. Count 0
             Variable Glb List ...        0.00 KB. Count 0
              Session Glb List ...        0.00 KB. Count 0
                   SymTab List ...      333.84 KB. Count 19411

 

(Informações de pools internos de memória do kernel do TOTVS Application Server)

----------- SmartHeap Pools Info ----------
                  ctSimplePool ...        3.98 Kb. Count 0
                     ctDtmPool ...        3.98 Kb. Count 0
                ctIntervalPool ...        3.98 Kb. Count 0
                   decimalPool ...        3.98 Kb. Count 0
                    stringPool ...     2759.30 Kb. Count 173870
                  rContentPool ...      263.91 Kb. Count 3571
                  namedVarPool ...       71.95 Kb. Count 17
                  instrVarPool ...      199.92 Kb. Count 3479
                       sumPool ...       71.95 Kb. Count 1
                   comparePool ...       71.95 Kb. Count 2
                  asnParamPool ...        3.98 Kb. Count 0
                  localEnvPool ...       71.95 Kb. Count 11
                   interFCPool ...       71.95 Kb. Count 8
                  directFCPool ...       71.95 Kb. Count 7
                inter4GLFCPool ...        3.98 Kb. Count 0
                   prgCodePool ...     3719.06 Kb. Count 11539
                   asnBasePool ...       71.95 Kb. Count 17
               ctCodeBlockPool ...       71.95 Kb. Count 100
               cctCodeBlockEnv ...       71.95 Kb. Count 2
                ctCodeBlockRef ...       71.95 Kb. Count 6
              ctCodeBlockInstr ...       71.95 Kb. Count 6
          ctAPXmlDocInterfacel ...        3.98 Kb. Count 0
                   ctClassData ...      135.94 Kb. Count 643
                   ctAPXmlItem ...        3.98 Kb. Count 0
             ctPrgFunctXRefEle ...      199.92 Kb. Count 7464
                  ctIdentifier ...       71.95 Kb. Count 12

           TOTAL POOLED MEMORY ...     8173.36 Kb.


 

(Resumo de alocação de memória da máquina)

----------- OS Memory Summary -------------
Physical memory .     3315.54 MB.   Used     1513.37 MB.   Free     1802.17 MB.
Paging file .....     6469.21 MB.   Used     1783.86 MB.   Free     4685.35 MB.


(Resumo de alocação de memória da aplicação)

----------- APP Memory Summary ------------
       Service Memory Capacity ...      2047.88 MB.
       Service Virtual Address ...      1118.72 MB.
       Service Resident Memory ...       875.47 MB.


[INFO ][SERVER] [MEMORY] VMA Avg   0.55 - Peak  1118.72 MB. - SL  2047.88 MB.

[INFO ][SERVER] [MEMORY] RES Avg   0.85 - Peak   875.45 MB. - UL  1024.00 MB.


Os dados adicionais apresentam as informações importantes para análise. Observe que, onde houve a mudança de status de alocação de memória para WARNING, temos uma imagem de utilização de memória do equipamento que possui 1802.17 MB de memória física disponível, sendo que o serviço do TOTVS Application Server pode endereçar até 2047 MB de memória e possui 1118.82 endereçada, das quais 875.47 MB são de memória residente, o que corresponde a 85% do limite definido de 1024.00 MB.

 

[INFO ][SERVER] [<DATE> <TIME>] Shrinking Memory Pools ...

Em intervalos de 60 ( sessenta) segundos, contados a partir da subida do TOTVS Application Server, é executado um procedimento automático para reorganizar áreas de memória alocadas para determinados objetos de processamento de uso interno do TOTVS Application Server. Em builds anteriores, esta operação era realizada a cada 3 minutos, sem emitir nenhum tipo de aviso. A partir da build atual, será registrado um log informativo da execução deste processo e, caso a chave DebugThreadUsedMemory, da seção [General], esteja habilitada, esta mensagem será acompanhada do status atual do servidor, que normalmente é apresentada apenas na mudança de status de ocupação de memória.

 

Informações adicionais sobre o monitoramento de memória

Para analisar o consumo de memória por processo/conexão, pode-se configurar a chave DebugThreadUsedMemory=1, na seção [General], do arquivo de configuração (totvsappserver.ini) do TOTVS Application Server. A configuração dessa chave nesta nova build, fará com que o processo de monitoramento de memória registre no arquivo de log de console o status e informações sobre o consumo de memória do serviço em intervalos de 1 minuto, a partir do início da execução do serviço.

 

Considerações para plataforma LINUX

No ambiente Linux, existe um limite de endereçamento virtual de memória, configurado a partir da instrução "ulimit -v", cuja recomendação é que o mesmo esteja ilimitado (ulimit =v unlimited). Neste caso, quando o TOTVS Application Server é iniciado, o mesmo não conseguirá determinar um limite de memória para a aplicação e o monitoramento apenas registrará a quantidade de memória em uso.
Desta forma, para definir um limite de memória residente para o engine de monitoramento, deve-se especificar o limite em MB através da chave ServerMemoryLimit, na seção [General], do arquivo de configuração (totvsappserver.ini) do TOTVS Application Server.

Além disso, no ambiente Linux, quando da transição de um estado de alocação de memória para outro, as informações sobre o resumo de alocação de memória da máquina são apresentadas de forma diferente da build do TOTVS Application Server para plataforma Windows, mas os dados informados são considerados da mesma forma.

Informações adicionais

  • Melhoria realizada conforme análise das necessidades da ferramenta e melhoria contínua da plataforma de desenvolvimento do TOTVS Application Server.
  • Não há BOPS ou FNC relacionados.
  • Disponível a partir da build 7.00.090818P-091104

 

 

  • No labels