On 8/13/07, Jano Svitok <jan.svitok / gmail.com> wrote:
> On 8/13/07, Matt Harvey <matt / teamdawg.org> wrote:
> > This paragraph is motivation. While my question is not Rails-specific, I am
> > asking it because of Rails. I've been investigating the memory footprint of
> > my Mongrels. It is nice that they share the .so libraries from ImageMagick
> > as well as other C libraries. However, each one still has about 20MB in
> > [heap]. My theory is that a lot of this is coming from ActiveRecord and
> > friends getting loaded again and again for each Mongrel, which seems to me
> > entirely unnecessary. My "marginal cost of Apache" is 1376kB. My "marginal
> > cost of Mongrel" is 27528kB, with the code I wrote. It seems that the latter
> > could be reduced a lot by sharing some Ruby libraries.
> >
> > The question is as follows: if I require 'library' in one instance of Ruby
> > and then require 'library' again in another instance of Ruby, then do I get
> > duplicate copies of library's code in two chunks of my RAM? (I'm thinking I
> > do.) Why?
>
> I suppose the main problem is that Rails (or ActiveRecord, I don't
> know exactly) is not thread-safe. That means you cannot share most of
> its the data. That is the reason why you have to run more mongrels
> compared to a one multi-threaded mongrel.
>
> I don't know where exactly is the problem with rails/ar though, nor
> whether is it at least theoretically solvable.

And one more note: you can save a bit of memory, if you put the thread
safe code into one drb server, although most probably it's not worth
the effort.