Gargalo de desempenho do PostgreSQL LISTEN/NOTIFY: Lições do processamento de milhões de horas de reuniões

2025-07-11
Gargalo de desempenho do PostgreSQL LISTEN/NOTIFY: Lições do processamento de milhões de horas de reuniões

A Recall.ai processa milhões de horas de dados de reuniões a cada mês. Seu banco de dados PostgreSQL sofreu quedas devido a gravações de alta concorrência. A investigação revelou que o recurso LISTEN/NOTIFY adquire uma trava global do banco de dados durante o commit da transação, serializando todos os commits e criando um gargalo. A migração dessa lógica para a camada de aplicação resolveu o problema.

Leia mais
Desenvolvimento

Uma pegadinha do ciclo de vida de thread do kernel do Linux: o caso do processo Chromium que morre aleatoriamente

2025-04-10
Uma pegadinha do ciclo de vida de thread do kernel do Linux: o caso do processo Chromium que morre aleatoriamente

Ao otimizar a latência de inicialização do Output Media da Recall.ai, um engenheiro encontrou um bug intrigante: o processo Chromium terminava aleatoriamente após o lançamento. A causa raiz foi rastreada para a sinalização `--die-with-parent` do Bubblewrap e o tratamento do PR_SET_PDEATHSIG pelo kernel do Linux. Essa sinalização faz com que os processos filhos recebam um sinal SIGKILL quando a thread pai, não o processo pai, termina. A gestão de threads do Tokio interagiu com esse comportamento, levando à terminação inesperada do Chromium quando a thread pai era colhida. Remover a sinalização resolveu o problema, mas revelou uma peculiaridade pouco conhecida do kernel do Linux, sublinhando a necessidade de cautela ao lidar com a interação entre ciclos de vida de threads e isolamento de processos.

Leia mais
Desenvolvimento

Redução de Latência em 83% com Flags Esotéricas de Processo Linux

2025-03-06
Redução de Latência em 83% com Flags Esotéricas de Processo Linux

Um engenheiro, otimizando o recurso Output Media da Recall.ai, deparou-se com um problema intrigante: terminação aleatória do processo Chromium em um ambiente de sandbox. Após uma depuração profunda, a causa raiz foi descoberta: a função prctl(PR_SET_PDEATHSIG, SIGKILL) do kernel Linux, que rastreia threads pai, não processos. A interação inesperada com a gerência de threads do Tokio causou a colheita de threads pai e acionou o sinal SIGKILL, terminando o processo filho. Remover a flag --die-with-parent do Bubblewrap resolveu o problema, resultando em uma redução de latência de 83%.

Leia mais
Desenvolvimento otimização de latência