Requisições travam quando uma Promise nunca resolve ou rejeita - callback ausente, reject esquecido, cliente de banco de dados abandonado ou deadlock esperando por si mesma. No Express 5, o cliente atinge o timeout enquanto o servidor mantém conexões e slots do pool.
1. node --inspect + pause durante o travamento - inspecionar pilha assíncrona2. Registrar pool ativo: pool.totalCount, pool.idleCount, pool.waitingCount3. trace_unhandled_rejections em staging4. Adicionar withTimeout em torno de chamadas externas suspeitas
Construtor de Promise apenas com ramo resolve - APIs de Callback que erram silenciosamente travam. Correção: Sempre reject(err).
forEach com callback assíncrono - Não aguarda; corre e perde erros. Correção:for...of com await ou Promise.all.
Início de transação sem commit/rollback - Conexão mantida até o timeout. Correção:try { ... commit } catch { rollback } finally { release }.
Deadlock na mesma conexão - Aguardar query enquanto a transação está aberta no mesmo cliente incorretamente intercalada. Correção: Um fluxo sequencial por cliente.
Ignorar pool.waitingCount - Métrica atinge 10+ enquanto idleCount é 0. Correção: Liberar clientes; diminuir concorrência.