Sto sviluppando un'applicazione web con Merb e sto cercando una libreria di elaborazione delle immagini sicura e stabile. Lavoravo con Imagick in PHP, poi mi sono trasferito in ruby e ho iniziato a usare RMagick. Ma c'è un problema. Script a esecuzione prolungata che causano perdite di memoria. Esistono due soluzioni, ma non so quale sia la più stabile. Allora, cosa ne pensate?Come gestire le perdite di memoria in RMagick in Ruby?
In questo momento, la mia app utilizza l'API interna che ho scritto per elaborare le immagini, in PHP. Funziona su server separati insieme ad altre applicazioni, quindi non è un grosso problema. Ma penso che non sia una buona architettura.
In ogni caso, considererò qualche suggerimento pratico.
sì, era una delle soluzioni di cui ho sentito parlare. ma dall'altra parte, chiamare gc tutto il tempo non è una buona idea (ho visto un articolo a riguardo qualche tempo fa). può causare rallentamenti. e inoltre, gc è un'operazione molto "costosa". Non sono sicuro, ma al momento non ho opzioni. anche, c'è una versione migliorata di rmagick, ma ancora, ha perdite di memoria, solo la questione del tempo –
Il mio consiglio sarebbe di profilare la garbage collection e vedere se è possibile gestirlo. Un'alternativa sarebbe ImageScience (http://seattlerb.rubyforge.org/ImageScience.html) ma non è così efficace come RMagick. – Matt
Chiamando Image # destroy! nelle immagini intermedie, sono riuscito a ridurre l'utilizzo della memoria di un ordine di grandezza nella mia app Rails rilegata con RMagick, da 200 MB a> 40 MB. Il trucco consisteva nel mantenere il numero di oggetti Magick :: Image/Magick :: ImageList nella RAM allo stesso tempo il più basso possibile. Chiamare GC.start non era necessario. – foz