Memory leaks na development

Ostatnio zaobserwowałem dość ciekawą rzecz która się dzieje na development(na production nie występuje).

Na starcie aplikacja zużywa mniej więcej tyle ramu:
ps -eF

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD matthias 3155 1 10 22821 77724 0 17:03 ? 00:00:05 Rack: /var/proj/app1
Po 10 request’ach na home page

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD matthias 3155 1 18 131052 510296 0 17:03 ? 00:00:27 Rack: /var/proj/app1
Jak widać masakra, przeszło 400MB więcej po 10 request’ach.

Jeśli chodzi o tryb production to nie ma powyższej zależności:

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD matthias 3135 1 3 27314 96316 0 17:02 ? 00:00:08 Rack: /var/proj/app1
Po 10 request’ach na home page(za drugim razem żzera 10MB, a później nie przybywa nic ramu)

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD matthias 3135 1 7 28338 100220 0 17:02 ? 00:00:25 Rack: /var/proj/app1
Ktoś miał podobny problem?

Z góry dziękuje za pomoc.

Która wersja railsów i jaki to serwer? Przydałby się również Gemfile.

Mam to samo ze Spree (dość waniliowa aplikacja, rails 3.0.7 + spree 0.60), potrafi mi po kilkunastu requestach wleźć na swapa (2 GB RAM). Ale w trybie production jest spokój, więc nie marudzę.

Zważywszy na szybkośc wypełniania pamięci przez proces, podejrzewam że w ramach przeładowywania klas (a Spree to kawał kodu jest) po prostu nie są sprzątane te poprzednie przed przeładowaniem. Ale to tylko spekulacja.

Rails 3.0.7
Pasanger 3.0.3(bodajże)

Czyli to bug Rails?

Tak, to jest prawdopodobnie memory leak.

Proof:

Da się zrobić downgrade Rails?
Update na wyższą wersje chyba nie wchodzi w grę, bo chyba jakiś gem się wysypywał jak robiłęm dawniej update.

@Tomash, z tego co się orientuję, nie są czyszczone tylko nadpisywane.

To że nadpiszesz stałą wskazującą na klasę nową jej wersją nie znaczy, że udało się z pamięci wyrzucić poprzednią wersję klasy.

@Matthias - Możesz zobaczyć czy Active Reload ci pomoże: https://github.com/paneq/active_reload . Jeśli zużycie będzie mniejsze po 10 requestach to znaczy, że to przeładowywanie kodu powoduje wzrost zużycia pamięci. Jeśli będzie takie samo to raczej nie to.

W RoR 3.0.7 sytuacje ratuje
touch tmp/restart
Resetuje serwer i znikają napompowane megabajty RAMU.

Ale i tak polecam jak kto może upgrade do RoR 3.0.8. U mnie akurat app się nie rozsypał po bundle update && rake rails:update

@paneq
Dzięki za pomoc, zlookam gem jak będzie więcej luzu w pracy. :slight_smile:

RoR 3.0.8 ma całkowicie popsutą obsługę rjs, jest już 3.0.9 bez tych błędów.

Jezusmaria…
Te nowe realeasy to pole minowe.

A wszystko pięknie bangla w 3.0.9 czy znowu jakieś niespodzianki?

3.0.9 jest ok