J'utilise collectiveidea's delayed_job avec mon application Ruby on Rails (v2.3.8), et exécute environ 40 tâches en arrière-plan sur une machine Slicehost RAM de 8 Go (Ubuntu 10.04 LTS, Apache 2). Disons que je ssh dans mon serveur sans les travailleurs en cours d'exécution. Quand je fais free -m
, je vois que j'utilise généralement environ 1 Go de RAM sur 8. Ensuite, après le démarrage des travailleurs et d'attendre environ une minute pour qu'ils soient utilisés par le code, je suis à environ 4 Go. Si je reviens dans une heure ou deux, je serai à 8 Go et dans la mémoire d'échange, et mon site Web générera 502 erreurs. Jusqu'à présent, je venais de tuer les travailleurs et de les redémarrer, mais je préfère régler la racine du problème. Des pensées? Est-ce une fuite de mémoire? Ou, comme un ami l'a suggéré, ai-je besoin de trouver un moyen d'exécuter la collecte des ordures?Travaux retardés fuite de mémoire?
Répondre
À peu près chaque fois que quelqu'un pose une question à ce sujet, le problème est dans leur code. Essayez d'utiliser l'un des outils de profilage disponibles pour trouver où votre travail fuit. (https://github.com/wycats/ruby-prof ou similaire.)
Déclencher GC à la fin de chaque travail réduira votre utilisation maximale de la mémoire au prix de réduire votre débit. Cela n'empêchera pas Ruby de gonfler à la taille maximale requise par un travail individuel, cependant, puisque Ruby ne peut pas libérer de la mémoire au système d'exploitation. Je ne recommande pas cette approche.
En fait, Delayed :: Job 3.0 perd de la mémoire dans Ruby 1.9.2 si vos modèles ont des attributs sérialisés. (Je suis en train de rechercher une solution.)
est ici quelqu'un qui semblait avoir résolu, http://spacevatican.org/2012/1/26/memory-leak-in-yaml-on-ruby-1-9-2
Voilà la question de Retardé :: Job https://github.com/collectiveidea/delayed_job/issues/336
- 1. Travaux retardés réguliers
- 2. UITextView fuite de mémoire
- 3. istream_iterator fuite de mémoire
- 4. Objectif fuite de mémoire
- 5. Fuite de mémoire question
- 6. Fuite de mémoire PosgresSQL
- 7. Fuite de mémoire AVAudioPlayer
- 8. Fuite de mémoire Python?
- 9. stringWithContentsOfURL fuite de mémoire
- 10. mod_perl fuite de mémoire
- 11. ListView fuite de mémoire?
- 12. NSString fuite de mémoire?
- 13. javascript fuite de mémoire
- 14. pushViewController fuite de mémoire
- 15. mutableCopy fuite de mémoire
- 16. fuite de mémoire tabBarController
- 17. Fuite de mémoire SendToAsync?
- 18. AudioServicesCreateSystemSoundID fuite de mémoire?
- 19. getpwnam_r fuite de mémoire
- 20. sun.font.TrueTypeFont Fuite de mémoire?
- 21. BHO fuite de mémoire
- 22. javascript fuite de mémoire
- 23. Ajax fuite de mémoire
- 24. BindingList fuite de mémoire
- 25. GetOracleDecimal fuite de mémoire
- 26. Fuite de mémoire NSString
- 27. Fuite de mémoire ToolStrip
- 28. Fuite de mémoire cachée
- 29. JAXBContext.newInstance fuite de mémoire
- 30. MODI fuite de mémoire
Cela ressemble à une fuite de mémoire, mais il peut être dans votre code qui est exécuté par deleayed_job, il ne doit pas être dans delayed_job. du code à réviser pourrait aider. – jigfox
gardez également à l'esprit que 1.9 et 1.8 ne rendront jamais la mémoire au système d'exploitation. – tliff