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?
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.
@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.