Vazamentos de recursos e / ou memória e fragmentação são problemas comuns em todas as linguagens de programação. Não importa se existe ou não um coletor de lixo, uma linguagem compilada ou interpretada. Ruby não é exceção, e hoje falaremos um pouco sobre esses problemas, opções para resolvê-los e até escreveremos os nossos.
O problema pode aparecer e aparece quando temos um processo em execução por muito tempo e fazendo um monte de trabalho diferente. A maioria desses problemas está relacionada a erros no código, por meio dos quais o código continua a executar sua função de negócios de maneira bastante correta. Eles nem sempre são fáceis de encontrar e consertar. Mas a fragmentação da memória nos espera um pouco do outro lado, e mesmo o código correto pode gradualmente acumular memória fragmentada. No mundo dos processos Rails que se enquadram na categoria de "long-playing" são, na verdade, um servidor web e várias tarefas de gerenciamento de fundo / pendentes - DelayedJob
, Sidekiq
etc. Isso é sobre eles e então vamos conversar.
servidor web
“” . /, (puma, unicorn), Phusion Passenger . “” -, Rails-. , :
https://about.gitlab.com/blog/2015/06/05/how-gitlab-uses-unicorn-and-unicorn-worker-killer/
https://github.com/schneems/puma_worker_killer
https://docs.gitlab.com/ee/administration/operations/sidekiq_memory_killer.html
, “” — . — — . — Passenger Enterprise .
- , DelayedJob
, ActiveJob
( “ ” ). — — . Sidekiq
, DelayedJob
!
- DelayedJob
WorkerKiller
— !
?
middleware
, , .
CPU, . — , , , “" — Limiter
.
— Killer
. unicorn
— SIGTERM. — , Passenger Master Process . , , “inflight” . , :
passenger-config detach-process <PID>
, 500 , 100. Passenger — -, , .
!
-, , , - DelayedJob
. , , .
!
? WorkerKiller ? , . — , , , . — , .
, :
-
-
-
Como contar a memória no Linux - apenas para homens reais
Assassino por unicórnio - ele foi o primeiro!
Como depurar vazamentos de Ruby