# Como solucionar erros de “Out of memory” na implantação

O erro de falta de memória, “*Out of Memory”*, ocorre quando o *pipeline* tenta consumir mais memória do que foi alocada durante a implantação.

## Identifique os erros de *Out of memory* <a href="#h_db3c123681" id="h_db3c123681"></a>

A primeira etapa para resolver esse problema é encontrar sua causa analisando os *logs* de execução do *pipeline* com falha. A sobrecarga de memória pode ter acontecido por:

* fazer consultas em uma grande quantidade de dados sem paginação em uma solicitação *HTTP*, um banco de dados ou ao baixar e ler um arquivo na memória;
* executar muitas execuções simultâneas;
* usar o componente *Session Management* para armazenar dados e não limpá-lo após a leitura.

{% hint style="info" %}
**Nota:** Verifique a data da última implantação. Se for mais antigo que a última versão, execute uma reimplantação para atualizar o *pipeline*.
{% endhint %}

## Corrija os erros <a href="#h_50d5c5a0ad" id="h_50d5c5a0ad"></a>

### Atualize o *Pipeline Engine* para a versão mais recente <a href="#h_ea6971c9d7" id="h_ea6971c9d7"></a>

Para atualizar o [*Pipeline Engine*](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/development-cycle/overview/runtime/pipeline-engine) para uma possível nova versão, a primeira coisa que você precisa fazer é reimplantar o *pipeline* (reciclagem do *pipeline*). [Para obter mais informações, consulte Reimplantando um *pipeline*](https://docs.digibee.com/documentation/troubleshooting/pt-br/deployment-issues/broken-reference).

Isso pode acontecer porque a *Digibee Integration Platform* atualiza regularmente sua infraestrutura. Parte desta atualização é reciclar os computadores que oferecem suporte à infraestrutura. [Saiba mais sobre reciclagem de *pipelines* em Alerta nos *pipelines* em *Run*.](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/development-cycle/overview/deployment/how-warnings-work-on-pipelines-in-run)

### Evite grande quantidade de dados sem paginação <a href="#h_221443454e" id="h_221443454e"></a>

Os erros de *“Out of memory”* também podem ser resolvidos por paginação e/ou uma arquitetura orientada a eventos. A paginação permite que você processe dados em partes, em vez de tudo de uma só vez. [Para obter mais informações sobre paginação, consulte Exemplos de paginação.](https://app.gitbook.com/s/XfrDexGOLMin51pAiWkq/best-practices/paginations-example)

Implementar uma arquitetura orientada a eventos significa usar o *pipeline* principal para recuperar dados e criar um *loop* que passa por esses dados e chama um segundo *pipeline* que possui um [*event trigger*](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/messaging-and-events/event).

Dessa forma, você divide a carga de memória e cria um fluxo de integração escalável que funciona com conjuntos de dados pequenos e grandes. [Para saber mais sobre Arquiteturas orientadas a eventos, consulte este artigo.](https://app.gitbook.com/s/XfrDexGOLMin51pAiWkq/best-practices/event-oriented-architecture)

Após os ajustes necessários no *pipeline*, reimplante novamente no ambiente de teste.

### Organize as execuções simultâneas <a href="#h_541d6886d1" id="h_541d6886d1"></a>

Os consumidores compartilham a memória disponível no contêiner. Ou seja, quanto mais consumidores, menos memória disponível para cada um. É recomendável adicionar novas réplicas a esse *pipeline* para fluir o processo.

Um *pipeline SMALL* com 2 réplicas tem o dobro do desempenho de processamento e escalabilidade e assim por diante. As réplicas não apenas fornecem mais poder de processamento e escalabilidade, mas também garantem maior disponibilidade - se uma das réplicas falhar, haverá outras para assumir. [Para obter mais informações sobre esses conceitos, consulte *Pipeline Engine*](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/development-cycle/overview/runtime/pipeline-engine)*.*

Após fazer os ajustes necessários no *pipeline*, reimplante-o no ambiente de teste. Se o erro persistir, aumente o Tamanho da implantação do *pipeline*.

### Limpe o componente *Session Management* <a href="#h_d1208234ed" id="h_d1208234ed"></a>

Uma boa prática para reduzir o risco de sobrecarga ou falta de memória é a limpeza do componente *Session Management,* que salva os dados depois de lê-los.  Para realizar esta ação, configure a função *DELETE* nas operações do componente.

Assim, após o componente enviar a mensagem como resposta final, é possível limpar os dados armazenados após a leitura com a operação *DELETE* caso este componente seja a última etapa do *pipeline*. [Para saber mais sobre o componente *Session Management*, consulte este artigo.](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/structured-data/session-management)
