Hi,

Can you please tell me when the server forks?
What should I do to load some classes before the server forks?
What should I do if I want to load the classes after the server forks?

Thank you for clarifications.

Octavian

----- Original Message -----
From: "Perrin Harkins"
To: "Boysenberry Payne"
Cc: "modperl List"
Sent: Thursday, November 08, 2007 1:04 AM
Subject: Re: mod_perl2 and Apache::SharedMem


> On Nov 7, 2007 5:50 PM, Boysenberry Payne
> wrote:
>> If I created some of my static hashes and objects during the
>> PerlPostConfigHandler phase
>> and added them to either the configuration or log pools

>
> You're missing the big picture. Adding perl objects to a shared
> memory pool doesn't prevent them also needing to be in perl's own
> allocated memory pool. All shared memory schemes with perl result in
> MORE memory being used, because every process that accesses these
> structures needs its own copy in its own process in addition to the
> shared one. The shared memory one is a serialized perl structure,
> created with something like Storable and perl has to turn it back into
> a normal perl variable, in non-shared memory, in order to use it.
>
> You can't use less memory by sharing your perl data with user-level
> shared memory techniques. Only copy-on-write can help with that.
>
>> I have classes that create singleton objects with lots of static
>> parts. Should I build these "constructs"
>> on server post config so they're already built in the child processes
>> as shared memory rather than
>> building them in each child, increasing the non-shared memory use?

>
> Build them before the server forks if you use prefork.
>
>> Would it allow me to reduce what I have set for
>> $Apache2::SizeLimit::MAX_UNSHARED_SIZE?

>
> You shouldn't be using that at all unless you have Linux::Smaps
> installed, but if you do, loading things before forking should improve
> the amount of copy-on-write sharing.
>
> - Perrin