You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Clinton Gormley <cl...@traveljury.com> on 2007/12/07 19:32:40 UTC

Re: Using dtrace to determine which modules aren't loaded at startup time

Really interesting mail - if you're on perl monks, please cross post it
to there - there are a few UTF gurus who could help you out there.

If you're not, drop me a line and I'll post it for you.

Clint

On Fri, 2007-12-07 at 10:10 -0800, Fred Moyer wrote:
> Greetings mod_perl list,
> 
> I've been having fun with dtrace, and I most recently used it to see 
> what files are being accessed by mod_perl during requests.  I've 
> preloaded all the modules in my application that I know about into 
> startup.pl, but when I startup my httpd server and make a request, I got 
> some unexpected results.
> 
> sudo rwsnoop -n httpd
> 
>    501   3509 httpd        R     405 http.pm
>    501   3509 httpd        R       0 http.pm
>    501   3509 httpd        R    2239 _server.pm
>    501   3509 httpd        R       0 _server.pm
>    501   3509 httpd        R    4096 _generic.pm
>    501   3509 httpd        R    1563 _generic.pm
>    501   3509 httpd        R       0 _generic.pm
>    501   3509 httpd        R    2052 _query.pm
>    501   3509 httpd        R       0 _query.pm
> 
> Those files showed up during the first request, but not subsequent 
> requests.  A little digging showed that this was the URI::http module 
> being loaded at runtime, since my application uses URI.  But I
> 'use URI ();' in my startup.pl - apparently URI::http isn't being 
> loaded.  Looks like URI requires http.pm at runtime:
> 
> URI.pm:
> 
>      # check we actually have one for the scheme:
>      unless (@{"${ic}::ISA"}) {
>          # Try to load it
>          eval "require $ic";
> 
> Fine and good, I added URI::http to my startup.pl and those file stats 
> went away.  There were some other offenders too though:
> 
>    501   3508 httpd        R    4096 utf8_heavy.pl
>    501   3508 httpd        R    4096 utf8_heavy.pl
>    501   3508 httpd        R    2323 utf8_heavy.pl
>    501   3508 httpd        R       0 utf8_heavy.pl
>    501   3508 httpd        R    4096 PVA.pl
>    501   3508 httpd        R    4096 PVA.pl
>    501   3508 httpd        R    4096 PVA.pl
>    501   3508 httpd        R    4096 PVA.pl
>    501   3508 httpd        R    1952 PVA.pl
>    501   3508 httpd        R       0 PVA.pl
>    501   3508 httpd        R    1279 Exact.pl
>    501   3508 httpd        R       0 Exact.pl
>    501   3508 httpd        R    4096 Canonical.pl
>    501   3508 httpd        R    4096 Canonical.pl
>    501   3508 httpd        R    4096 Canonical.pl
>    501   3508 httpd        R    4096 Canonical.pl
>    501   3508 httpd        R    4096 Canonical.pl
>    501   3508 httpd        R    1529 Canonical.pl
>    501   3508 httpd        R       0 Canonical.pl
>    501   3508 httpd        R    4096 Fold.pl
>    501   3508 httpd        R    4096 Fold.pl
>    501   3508 httpd        R    4096 Fold.pl
>    501   3508 httpd        R    1709 Fold.pl
>    501   3508 httpd        R       0 Fold.pl
>    501   3508 httpd        R     324 SpacePer.pl
>    501   3508 httpd        R       0 SpacePer.pl
> 
> Hmm, I use Encode in my application, and preload it but why aren't those 
> files being loaded at startup?
> 
> I tried adding 'use utf8 ();' to startup.pl and it had no effect.
> 
> So I added the following require directives to startup.pl
> 
>     require 'utf8_heavy.pl';
>     require 'unicore/PVA.pl';
>     require 'unicore/Exact.pl';
>     require 'unicore/Canonical.pl';
>     require 'unicore/To/Fold.pl';
>     require 'unicore/lib/gc_sc/SpacePer.pl';
> 
> and everything but Fold.pl and SpacePer.pl was loaded at startup.  The 
> remainind dtrace lines:
> 
>    501   3687 httpd        R    4096 Fold.pl
>    501   3687 httpd        R    4096 Fold.pl
>    501   3687 httpd        R    4096 Fold.pl
>    501   3687 httpd        R    1709 Fold.pl
>    501   3687 httpd        R       0 Fold.pl
>    501   3687 httpd        R     324 SpacePer.pl
>    501   3687 httpd        R       0 SpacePer.pl
> 
> I'm not sure why these programs are still loaded at runtime, but I've 
> probably managed to save about 40k or so per process by preloading these 
> modules I am guessing.  Not much but every byte counts.
> 
> If anyone has the unicode foo to tell me why those programs aren't 
> loading, I'd be very interested in knowing.
> 
> - Fred