O dia em que um Xeon caiu porque eu escrevi if ($var = ‘Concluído’) (Xeon ajoelhou e pediu arrego.)

Todo desenvolvedor já fez besteira. Mas poucas besteiras são tão eficientes quanto escrever um “=“ no lugar errado e transformar um servidor robusto em um peso de papel de 10 kg.

Sim, este é um relato técnico.
Sim, é baseado em fatos reais.
Sim, é exatamente o que você está imaginando.

O cenário perfeito para a tragédia

A máquina era um Xeon parrudo, várias versões de PHP-FPM rodando lado a lado, tudo estável.
Até que um script inocente precisava apenas verificar se o status era “Concluído”.

O que poderia dar errado?

if ($status = "Concluído") {
    // código
}

Tudo. Absolutamente tudo.

Afinal, isso não é uma comparação. Isso é atribuição.
E o PHP, com toda a bondade do inferno, aceita e segue em frente.

O efeito dominó

Esse pequeno caractere:

  • quebrou a lógica,
  • gerou comportamento inesperado,
  • desencadeou um fluxo que não deveria existir,
  • e fez o PHP-FPM entrar num loop de requisições presas.

E quando o FPM trava, adivinha?

As outras versões travam junto.
Porque o sistema operacional não quer perder a festa e resolve engasgar tudo de uma vez.

O Xeon, com dezenas de threads ociosas, simplesmente… parou.
Load à lua. Top 100% CPU.
E a máquina inteira no modo “vamos todos morrer juntos”.

A experiência extra-sensorial

Você aperta CTRL+C, não responde.
Você tenta reiniciar o FPM, não responde.
Você tenta matar os processos, nada.
Você olha para o monitor e percebe que até o cursor do mouse está decepcionado.

No fim, sobra a onipotente solução universal:
reiniciar o servidor inteiro como quem formata a alma.

Por que isso acontece de verdade

Tecnicamente:

  • O FPM cria workers que atendem requisições.
  • Um loop preso consome um worker.
  • Se várias requisições acionam a mesma condição errada, vários workers morrem.
  • Quando todos os workers travam, o FPM não responde mais.
  • E se a configuração geral compartilha recursos entre pools (algo comum), a queda vira cascata.
  • O Linux tenta gerenciar o caos, entra em pressão de CPU, swap, load descontrolado.
  • E o servidor parece um Windows 98 abrindo o Photoshop.

Agora imagine isso num host compartilhado

Se no Xeon local um único arquivo parou o planeta, imagine isso num ambiente onde:

  • todos usam o mesmo FPM,
  • ninguém isola pool por usuário,
  • e o limite de processos já é baixo.

Você derruba não só o seu site, mas também:

  • o da pizzaria da esquina,
  • o da ótica do condomínio,
  • o do cara que vende curso milagroso,
  • e mais uns 40 blogs WordPress de astrologia.

É quase um ataque DDoS acidental, assinado por “um dev só testando um negocinho”.

Moral técnica da história

Nunca confie em:

if ($status = "Concluído")

Use:

if ($status === "Concluído")

E sempre teste scripts duvidosos em:

  • Docker, (eu odeio de paixão Docker)
  • VM isolada,
  • local,
  • qualquer coisa que não seja servidor real.

Porque basta um caractere errado para transformar um Xeon em um peso de porta.

Rolar para cima