[Catalyst] Running Catalyst apps with start_server

Tomas Doran bobtfish at bobtfish.net
Wed Jan 25 14:59:08 GMT 2012


On 25 Jan 2012, at 13:41, Octavian Rasnita wrote:

> Is closing and starting starman now and then the only solution?

No, and I didn't suggest that at any point.

You ask starman to restart child processes after N requests. This is  
entirely different to restarting the entire Starman (as there is no  
interruption in service - one worker quits after finishing handling  
it's current request).

And memory leakage aside - this is the only possible way to maximise  
memory sharing - as pages which were shared with the parent _will_ get  
un-shared as you continue processing requests - there isn't anything  
you can do about this, it's just how copy on write works...

(As perl is interpreted, your perl code lives in 'data' pages, rather  
than executable pages - so you don't and can't get the same memory  
sharing you can in C - where the code pages are always shared with  
your child processes - as you're executing the same program...

Or, rather - you do get exactly the same semantics - the perl binary  
itself, and any shared objects (.so files) you have loaded in the  
parent will be shared with children forever - but this is generally a  
small proportion of your memory use, compared to your perl code and  
data structures, which all live in 'data' pages - meaning that your  
program running causes static perl code in data pages to become  
unshared..

Cheers
t0m




More information about the Catalyst mailing list