Introdução
Um erro de timeout no Odoo acontece quando uma operação demora mais do que o tempo limite definido para a execução e o pedido é interrompido antes de terminar.
Os erros de timeout surgem em diversas situações, tais como:
- Pedidos através da interface web
- Chamadas à API (XML-RPC / JSON-RPC / REST)
- Tarefas agendadas (cron jobs)
- Importações de dados
- Geração de relatórios
- Operações em grande volume
Quando ocorre um timeout, os utilizadores podem ver:
- “504 Gateway Timeout”
- “Request Timeout”
- “Odoo Server Error”
- Mensagens de timeout de workers nos logs do servidor
Como o Odoo costuma executar operações pesadas sobre a base de dados, queries mal otimizadas e conjuntos de dados volumosos são causas frequentes.
Este guia mostra por que os timeouts acontecem e que passos seguir para os resolver de forma eficiente.
O que é um erro de timeout no Odoo?
Odoo funciona com uma arquitetura baseada em workers: cada pedido tem de concluir dentro de um período configurado.
Se o processamento ultrapassar esse limite:
- O worker é terminado
- O pedido é abortado
- O sistema devolve um erro de timeout
Os timeouts podem ser desencadeados por vários pontos da cadeia:
- Limites dos workers do Odoo
- Timeouts do reverse proxy (Nginx / Apache)
- Limites de gateways de API
- Atrasos nas queries à base de dados
Na prática, um timeout é frequentemente um sinal de um estrangulamento de performance, não apenas uma configuração incorreta.
Causas habituais dos timeouts no Odoo
1. Processamento de grandes volumes
Quando um método tem de tratar:
- Milhares de registos
- Cálculos pesados
- Joins complexos
pode facilmente ultrapassar o tempo de execução disponível.
Isto é comum em importações em massa ou atualizações em lote.
2. Consultas ORM ineficientes
Pesquisas mal formuladas, por exemplo:
self.search([])
sem filtros ou limites podem causar a leitura de toda a tabela para memória.
Loops ineficazes sobre recordsets também degradam a performance.
3. Geração de relatórios pesados
Criar PDFs grandes ou documentos contabilísticos complexos pode exceder o limite dos workers.
4. Queries lentas na base de dados
Sem índices adequados ou com consultas pouco otimizadas, o PostgreSQL pode demorar demasiado a responder.
5. Cron jobs de longa duração
Ações agendadas que processam demasiados dados num único ciclo tendem a dar timeout.
6. Timeout do reverse proxy
Se o Odoo está por trás de Nginx ou similar, o proxy pode ter limites de tempo mais baixos do que os do Odoo.
7. Atrasos em APIs externas
Se o Odoo aguarda uma resposta externa lenta ou indisponível, o pedido pode ultrapassar o tempo limite.
Como resolver um erro de timeout no Odoo
Passo 1 – Identificar onde o timeout acontece
Verifique:
- A mensagem no navegador
- A resposta da API
- Os logs do servidor
- Os logs do proxy
Determine se o timeout é provocado por:
- Timeout do worker
- Timeout do proxy
- Atraso na base de dados
Passo 2 – Consultar os logs do servidor
Procure por entradas como:
Worker timeout (pid: ...)
Ou avisos de queries de longa execução.
Passo 3 – Otimizar o código
Se o problema está no desenvolvimento personalizado:
- Adicione filtros de domínio às pesquisas
- Procure processar em lotes em vez de tudo de uma vez
- Evite ciclos aninhados sobre grandes conjuntos
- Use read_group sempre que fizer sentido
Exemplo de abordagem por lotes:
records = self.search([], limit=100)
Processar em blocos evita carregar tudo em memória.
Passo 4 – Criar índices nos campos mais consultados
Quando as queries à base de dados são lentas, indexar campos usados com frequência melhora muito o desempenho.
Isto deve ser feito com cuidado em ambiente de produção.
Passo 5 – Aumentar o timeout dos workers (com cautela)
No ficheiro de configuração do Odoo:
limit_time_cpu limit_time_real
Aumente estes valores apenas depois de otimizar o código.
Não compense problemas de performance apenas elevando limites.
Passo 6 – Ajustar o reverse proxy
Se usar Nginx, verifique:
proxy_read_timeout
Assegure que esse valor está alinhado com os limites dos workers do Odoo.
Passo 7 – Deslocar tarefas pesadas para o background
Em vez de executar processos pesados em tempo real:
- Agende tarefas em segundo plano
- Divida operações longas em blocos menores
Isto evita bloqueios na interface do utilizador.
Como evitar erros de timeout
- Projete o código para escalar
- Use processamento por lotes nas operações volumosas
- Evite carregar tabelas inteiras na memória
- Monitorize a performance da base de dados
- Teste operações pesadas em ambiente de homologação
- Utilize processamento assíncrono para integrações
Os erros de timeout costumam revelar problemas de arquitetura ou de conceção de desempenho que convém resolver de forma estrutural.
Como a Dasolo interpreta e resolve tracebacks
Um traceback de erro no servidor do Odoo não é a causa em si, mas uma pista que mostra onde a execução falhou. Apesar de técnico, o traceback costuma apontar para problemas mais profundos na lógica personalizada, no tratamento de dados ou na configuração de módulos.
Na Dasolo, quando analisamos tracebacks focamo-nos em:
- Tipo de exceção e mensagem original
- Contexto de execução e ação que desencadeou o erro
- Alterações recentes a módulos ou configurações
- Cadeias de dependência e heranças entre módulos
- Inconsistências de dados que possam afetar a execução
Ver os tracebacks como sinais arquitetónicos, não como falhas isoladas, permite-nos localizar e corrigir fragilidades estruturais no sistema.
Conclusão
O “Server Error Traceback” do Odoo aparece quando uma exceção não tratada interrompe o backend. Apesar do detalhe técnico, o traceback é apenas um sintoma de um problema subjacente no código, nas configurações ou na estrutura de dados.
Ao analisar o stack trace completo, identificar a exceção raiz e validar os modelos e lógicas envolvidas, uma equipa de desenvolvimento resolve o problema de forma eficaz. Uma abordagem estruturada transforma tracebacks em ferramentas de diagnóstico que evitam repetição de falhas em produção.