On Jun 30, 2007, at 2:40 AM, Tony van der Hoff wrote:

Well, it is my intention that the modules should be reloaded if they've changed; that's the whole point of using Apache::Reload, so I'm pleased it works. Presumably, if they haven't changed, the only performance hit is a stat to the file system, and then only on those modules which explicitly
call Apache::Reload. I think I can live with that :)

Thats the intention of the devel environment. But aside from the performance hit, reload doesn't work perfectly. some module changes won't get picked up due to class override / superclass conflicts, other changes will cause Reload to just crash your server. when you're running reload, you're ideally having the stat and a clean reload -- in practice you can get larger performance hits from the stat being read wrong and tons of crashes.

However, without the ability to restart the server, and short of renaming the files, how should I update my software? It won't happen much at the production end, but it will certainly happen. Shouting Never, Never, Never is all very well, and undoubtedly good advice, but it's a bit impractical
without an alternative.

assuming you're on a nix/bsd -- you need to be able to restart the server. if you can't , then you shouldn't be using mod_perl. see if you can run apache on a port you can control, then proxypass to it. mod_perl does a lot of performance/memory optimizations by using the copy-on-write model for vars and caching compiled subs. when you 'reload' code, you're just redefining the subs... which means they get unshared.

illustration
        start   parent-a
        fork            child-a child-a child-a
        update code
        reload
                        child-a child-a child-b
                        child-a child-b child-b
                        child-b child-b child-b
i'm not sure how reload affects the master-process memory-- but I have a funny feeling that new children will spawn with the pre-update code, then stat to the new code



What are the other problems you refer to? I've been lurking on this list for some months, but have not seen anything mentioned, and Google doesn't throw
up anything on the first few pages.

look back within the past 18-6 months. there was a lot of reload talk then. not as much lately.

also, you should never do an apachectl restart/graceful.
you want to do a full apache stop, and then apache start. the integrated restart command will essentially cause a memory leak ( its not really leaking, but the memory isn't recycled/overwrriten -- so your process will double on size the first restart, etc etc etc )



On Jun 30, 2007, at 6:13 AM, Clinton Gormley wrote:
With regards using Apache::Reload in production, my understanding is
that, while Apache::Reload is really useful for development, there are
edge cases where things get messed up, and which require a stop- start to
get them working again.  And for this reason, we would not usually
consider using this module in production.

its much less edge-cases than it is use-cases.



// Jonathan Vanasco

| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   CEO/Founder SyndiClick Networks
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|     Founder/CTO/CVO
|      FindMeOn.com - The cure for Multiple Web Personality Disorder
|      Web Identity Management and 3D Social Networking
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|      RoadSound.com - Tools For Bands, Stuff For Fans
|      Collaborative Online Management And Syndication Tools
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Reply via email to