Post

Sidekiq na operação: iniciando, parando e matando processos

Sidekiq na operação: iniciando, parando e matando processos

Série Sidekiq — parte 1 de 4

  1. Você está aqui — Infra: iniciando, parando, matando
  2. Diagnóstico pelo console
  3. Manipulação em massa de jobs e processos
  4. Hacks de UI no painel

Antes de mergulhar nas filas e jobs, é bom ter o básico do ciclo de vida do processo Sidekiq sólido — porque a maior parte dos incidentes começa com “como derrubo isso sem perder jobs”.

Documentação da API: github.com/mperham/sidekiq/wiki/API.

Iniciando o Sidekiq

1
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml
  • -d daemoniza (libera o terminal).
  • -L log/sidekiq.log aponta o arquivo de log.
  • -C config/sidekiq.yml aponta o arquivo de configuração (filas, concorrência, retries).

Em produção esse comando geralmente vive num systemd unit ou no Procfile do app, mas pra testes locais e VPS sem orquestrador é perfeito.

Parando pelo controlador do Rails (recomendado)

1
2
3
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > tmp/sidekiq.pid
cat tmp/sidekiq.pid
bundle exec sidekiqctl stop tmp/sidekiq.pid

sidekiqctl stop espera os jobs em execução terminarem (até o timeout configurado) antes de matar o processo. É a forma educada — preserva idempotência se algum worker estiver no meio de uma operação não-atômica.

O pipe ps -ef | grep busy filtra pelo processo que está realmente trabalhando (não a master), e o awk '{print $2}' extrai só o PID.

Parando pelo SO (último recurso)

1
2
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}'
kill -9 $(ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}')

kill -9 é o botão vermelho: o processo morre na hora, sem chance de terminar o que estava fazendo. Job em execução vira retry, então só faça quando:

  • O sidekiqctl stop travou e não responde
  • O processo virou zumbi e está consumindo memória sem fazer nada
  • Você está numa situação de incêndio onde derrubar é mais importante que preservar idempotência

Se você se pega usando kill -9 com frequência, vale investigar por que o stop está demorando — geralmente é job que não respeita o timeout ou conexão de banco travada.

Próximo da série

Diagnóstico de Sidekiq pelo consoleSidekiq::Stats, agrupamento por classe, listagem de processos e workers.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.