memory full / Memory Allocation Failure
Este documento explica a ocorrência crítica de execução "Memory Allocation Failure" as possíveis causas de reprodução da mesma.
/*-------------------------------------------------------ERRO THREAD (user, SRV) <date> <time> Stack :memory full in file C:\advtec9\interfacetst\apwinnt.cpp at line 461 on <function> [build:<build>][environment: <env>][thread <nnn>]Called from <function_stack>-------------------------------------------------------*/
Uma ocorrência do tipo 'memory full' é reproduzida no Servidor de Aplicação, quando o servidor de aplicação ( TOTVS Application Server ) solicitou ao sistema operacional uma determinada quantidade de memória, e o sistema operacional não conseguiu devolver para o TOTVS Application Server o endereço correspondente à alocação solicitada. A partir do release 7.00.090818P, a mensagem "memory full" foi substituída para "Memory Allocation Failure", seguido da quantidade de memória solicitada pela aplicação que o sistema operacional não conseguiu alocar.
Possíveis causas :
- O Limite de alocação de memória por aplicação (**) foi atingido. Neste caso, a soma da memoria alocada por todos os processos em execução no TOTVS Application Server atingiu o limite de alocação de memoria por aplicação do sistema operacional. Deve ser verificado se o limite foi atingido pois um processo especifico entrou em loop e/ou está alocando uma quantidade de memória acima da média ( por exemplo um programa acrescentando muitos dados em um array ) , ou se a quantidade de processos em execução está muito alta, onde cada processo ocupa uma média de X MB. de RAM, a partir de NNN processos, fatalmente o limite será atingido.
- Esgotamento da memória alocável do equipamento ( física e/ou virtual ) , onde um ou mais programas consumiram toda a memória paginável da maquina, colocando-a em um estado onde o sustema operacional nao têm mais memoria disponivel para alocar para a aplicação. Este cenário é mais difícil de ser reproduzido, e pode ser precedido de perdas significativas de performance em todas as aplicações rodando no equipamento ( devido ao uso de memoria virtual ), antes de efetivamente a aplicação apresentar o erro / falha de alocação de memória.
- Em ambiente Linux, pode haver falha de alocação de memória caso o limite de alocação de memoria por processo ( ulimit -v ) esteja configurado inadequadamente antes de subir a aplicação TOTVS Application Server no Linux. Também pode haver esgotamento de memoria caso a alocação de memória de stack ( ulimit -s ) esteja acima de 1024 K ( 1 MB ) , e a quantidade de processos no ar seja muito alta - como por exemplo a configuração de um TOTVS Application Server como servidor de licenças).
(**) Os limites de gerenciamento de memória para aplicações podem variar entre os sitemas operacionais ( Windows / Linux ) e plataformas ( 32 we 64 bits ). Para mais informações sobre os limites de alocação de memória de aplicações 32 bits, consulte o documento Consumo de memória de aplicação de 32 bits.