Salve lista,
Versione breve:
Come posso abbassare il footprint di memoria di un’applicazione Rails?
Se ci sono delle best pratice, e da cosa dipende l’uso di memoria:
quantit di modelli, quantit di query…
Versione lunga:
sto lavorando da qualche mese ad un progetto Rails che gira in
produzione in questo ambiente:
- VPS OpenVZ
- Linux Gentoo
- Ruby 1.8.7 (2010-01-10 patchlevel 249)
- Apache 2.2.4 MPM worker
- Passenger 2.2.15 smart-lv2
- Rails 2.3-stable
- Rails plugin e gem a pacchi, molte da git, tra cui prawn, formtastic,
activescaffold, rubyvis, rmagick, paperclip, class-table-inheritance,
cancan, breadcrumbs_on_rails, delocalize, globalize2, render_component
…
Da un po’ di tempo ad intervalli variabili da 2-4 ore a 2-4 giorni tutto
passenger si ferma, i processi di passenger (ApplicationPool, spawn
server, ApplicationSpawner, e workers) sembrano essere OK ma
semplicemente non rispondono, esaminando con strace sembrano attendere
in read indefinitamente senza fare niente quando ricevono richieste
HTTP.
Per anni tutto ha funzionato correttamente, mai uno stop di passenger.
L’evento scatenante sembra essere stato il passaggio da ruby 1.8.6 a
1.8.7 oppure il fatto che ho messo in produzione l’applicazione di cui
sopra che da passenger-memory-stats dice di occupare tantissimo:
VMSize=196.7 MB Private=150.8 MB
Tantissimo visto che Redmine dice di occupare meno della met.
Non sembra essere un problema di risorse esaurite perch il VPS segnala
che i limiti non vengono raggiunti.
Facendo dei test con ab2 tutto risponde bene ad un accettabile livello
di performance sul tempo di risposta e sulla concorrenza.
Ormai ho rinunciato a capire perch Passenger smette di rispondere ed ho
messo nagios a controllare e riavviare.
Il supporto di passenger sembra segnalare tantissimi utenti che hanno
problemi simili senza soluzione
Domande:
1- Avete applicazioni che occupano cos tanto?
2- Sapete come ridurne il footprint?
3- Avete passenger che si riavviano cos spesso?
Grazie,
Antonio B.