Witam, mam aplikację w RoR, kilkanaście modeli, jeszcze więcej kontrolerów, kilkanaście tys. linii kodu chyba się uzbiera…
Aplikacja powoli ale konsekwentnie zżera RAM, klasyczny memory leak. Nie korzystam z RMagick, zrezygnowałem chwilowo także z gettexta bo w jednej z ostatnich wersji miał wyciek i nic nie pomogło.
Trafiłem na następujące artykuły:
- http://codehappy.wordpress.com/2007/01/17/tracking-a-memory-leak-in-rails/
- http://whytheluckystiff.net/articles/theFullyUpturnedBin.html
- http://scottstuff.net/blog/articles/2006/08/17/memory-leak-profiling-with-rails
Najsensowniejszy jest ostatni. Nie za bardzo mogę dojść do tego, jak autor wywnioskował z wyniku skryptu z jego bloga, gdzie jest wyciek. Skrypt wypisuje mi, że mam np. 140 więcej stringów przy requeście, potem liczba spada (ale bodajże o mniej niż uprzednio wzrosła). Mogę robić diff’a między listami stringów, które zrzuca ten skrypt, ale co z tego? Jak mam rozpoznać, które akurat są alokowane i z powodu jakiegoś np. durnego odwołania do stałej nie tam gdzie trzeba nigdy nie zostaną wywalone z pamięci?
Macie jakieś doświadczenie w szukaniu tego typu problemów? Albo możecie mnie naprowadzić na interpretację wyników z ww. skryptu? Z góry dzięki, póki co pomaga jedynie ubijanie mongreli za pomocą monita powyżej pewnego progu zajętości RAMu.