Les fuites de ressources et / ou de mémoire et la fragmentation sont des problèmes courants dans tous les langages de programmation. Peu importe qu'il y ait un garbage collector ou non, un langage compilé ou interprété. Ruby ne fait pas exception, et aujourd'hui nous allons parler un peu de ces problèmes, des options pour les résoudre, et même écrire les nôtres.
Le problème peut apparaître et apparaît quand nous avons un processus en cours d'exécution pendant une longue période et effectuant beaucoup de travaux différents. La plupart de ces problèmes sont liés à des erreurs dans le code, par lesquelles le code continue de remplir correctement sa fonction commerciale. Ils ne sont pas toujours faciles à trouver et à réparer. Mais la fragmentation de la mémoire nous attend un peu de l'autre côté, et même un code correct peut progressivement accumuler une mémoire fragmentée. Dans le monde de Rails, les processus qui entrent dans la catégorie «longue durée» sont, en fait, un serveur Web et divers antécédents de gestion / tâches en attente -  DelayedJob
, Sidekiq
etc.
serveur 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 ? , .  —  , , , .  —  , .
, :
-
-
-
Comment compter la mémoire sous Linux  - uniquement pour les vrais hommes
Tueur de licorne  - il était le premier!
Comment déboguer les fuites Ruby