You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by David Scott <ds...@earthlink.net> on 2006/11/30 23:58:23 UTC
Apache2::Status "Memory Usage" fails on Debian
This is not a good Apache day. I already sent out a message regarding
an Apache::Scoreboard problem, and now Apache2::Status doesn't work either.
Here is an excerpt from httpd.conf:
ExtendedStatus On
PerlLoadModule Apache2::Status
PerlModule CGI
PerlModule B::TerseSize
Listen 7777
<VirtualHost *:7777>
<Location /perl-status>
SetHandler modperl
PerlOptions +GlobalRequest
PerlResponseHandler Apache2::Status
PerlSetVar StatusOptionsAll On
PerlSetVar StatusTerseSizeMainSummary On
PerlSetVar StatusDeparseOptions "-p -sC"
</Location>
</VirtualHost>
Whan I access perl-status, I get the following menu items:
Environment
Loaded Modules
Inheritance Tree
ISA Tree
HTML::Mason status
Perl Configuration
Compiled Registry Scripts
PerlRequire'd Files
Signal Handlers
Memory Usage
Symbol Table Dump
Everything works fine except Memory Usage, which complains to the error_log:
[Thu Nov 30 14:15:53 2006] [error] [client 127.0.0.1] Can't call method
"script_name" on an undefined value at
/usr/local/lib/perl/5.8.4/B/TerseSize.pm line 631.\n, referer:
http://localhost:7777/perl-status
At the offending line in TerseSize.pm, the $q variable is undefined.
From the docs, I take it this is a CGI object. Why is it undefined?
What is it supposed to be? Where is the CGI script? Am I supposed to
do something?
I'm sure that this has come up before and that there is a simple answer
to all this but I'd like to track memory usage in Apache2/mod_perl2 and
have been frustrated at every turn.
I'm using Apache 2.2.3 and mod_perl 2.0.3 with libapreq 2.08:
Apache/2.2.3 (Unix) mod_apreq2-20051231/2.6.0 mod_perl/2.0.3 Perl/v5.8.4
configured -- resuming normal operations
[Thu Nov 30 14:15:39 2006] [info] Server built: Nov 29 2006 17:32:31
Also, here is perl -V:
Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
Platform:
osname=linux, osvers=2.6.15.4, archname=i386-linux-thread-multi
uname='linux ninsei 2.6.15.4 #1 smp preempt mon feb 20 09:48:53 pst
2006 i686 gnulinux '
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.8.4
-Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm
-Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS
-DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN
-fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-13)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=/lib/libc-2.3.2.so, so=so, useshrplib=true,
libperl=libperl.so.5.8.4
gnulibc_version='2.3.2'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
PERL_IMPLICIT_CONTEXT
Built under linux
Compiled at Mar 23 2006 21:49:08
@INC:
/etc/perl
/usr/local/lib/perl/5.8.4
/usr/local/share/perl/5.8.4
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.8
/usr/share/perl/5.8
/usr/local/lib/site_perl
.
Thanks. I'd really like to get past this.
David
Re: Apache2::Status "Memory Usage" fails on Debian
Posted by "Philip M. Gollucci" <pg...@p6m7g8.com>.
David Scott wrote:
> The following patch makes life a lot easier:
>
> in B::TerseSize:
>
> 631c631
> < my $script = $q->script_name;
> ---
> > my $script = ( defined $q && $q ) ? $q->script_name : $r->uri;
>
> The problem is, the Apache 2 API doesn't use CGI query objects at all so
> you can't use the script name.
my $script = MP2 ? $r->uri : $q->script_name;
is better I think.
This will be in the very soon to be released B-Size 0.09
and I'll update mp2 svn to depend on a minium version of 0.09 for
B::TerseSize which is in the B-Size CPAN module.
Thanks John, Scott.
--
------------------------------------------------------------------------
Philip M. Gollucci (pgollucci@p6m7g8.com) 323.219.4708
Consultant / http://p6m7g8.net/Resume/resume.shtml
Senior Software Engineer - TicketMaster - http://ticketmaster.com
1024D/EC88A0BF 0DE5 C55C 6BF3 B235 2DAB B89E 1324 9B4F EC88 A0BF
I never had a dream come true
'Til the day that I found you.
Even though I pretend that I've moved on
You'll always be my baby.
I never found the words to say
You're the one I think about each day
And I know no matter where life takes me to
A part of me will always be...
A part of me will always be with you.
Re: Apache2::Status "Memory Usage" fails on Debian
Posted by David Scott <ds...@earthlink.net>.
The following patch makes life a lot easier:
in B::TerseSize:
631c631
< my $script = $q->script_name;
---
> my $script = ( defined $q && $q ) ? $q->script_name : $r->uri;
The problem is, the Apache 2 API doesn't use CGI query objects at all so
you can't use the script name.
d
Jonathan wrote:
>
> On Nov 30, 2006, at 5:58 PM, David Scott wrote:
>
>> This is not a good Apache day. I already sent out a message
>> regarding an Apache::Scoreboard problem, and now Apache2::Status
>> doesn't work either.
>
> it's a bug, but i think its platform specific/ odd
>
> i ran into the same thing a while back
>
> check out this:
>
> http://comments.gmane.org/gmane.comp.apache.mod-perl/24906
>
> i have 2 posts at the bottom, which i'll just paste here:
>
> =====
> Jonathan | 13 Aug 00:46
>
> I'm finding some issues with the 2 modules
>
> i think some of it happens when you have a module that has no
> subroutines ( ie , a namespace placeholder or something )
>
> check out ~ line 551 in Apache2::Status
>
> adding a few over-the-top checks seems to help, and gets memory use
> working on more items
>
> } (sort { $subs->{$b}->{size} <=> $subs->{$a}->{size} } keys %
> $subs);
>
> + return if ! scalar <at> keys;
> + return if ! defined $subs->{$keys[0]};
> + return if ! defined $subs->{$keys[0]}->{count};
> + return if ! defined $subs->{$keys[0]}->{size};
>
> my $clen = length $subs->{$keys[0]}->{count};
> my $slen = length $subs->{$keys[0]}->{size};
>
> i'll have more fixes as time progresses
>
> ======
>
> Jonathan | 13 Aug 00:56
>
> ok, also found
>
> I also figured this out:
>
> in B::TerseSize, line 634
>
> - my $script = $q->script_name;
>
> + my $script ;
> + if ( defined $q && $q )
> + {
> + $script = $q->script_name;
> + }
>
> Killing that makes a lot more things work too.
>
> The only caveat of that, is that 'memory usage' doesn't appear on /
> perl-status/ until you visit a symdump page that contains memory-
> usage. i don't know why. but that should only happen on situations
> already afflicted by the other bug. so its a stupid new bug instead
> of a bad old one.
>
> ==========
>
>
>
> // Jonathan Vanasco
>
> | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - - - - - - - - - - - -
> | 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
> | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - - - - - - - - - - - -
>
>
>
Re: Apache2::Status "Memory Usage" fails on Debian
Posted by Jonathan <mo...@2xlp.com>.
On Nov 30, 2006, at 5:58 PM, David Scott wrote:
> This is not a good Apache day. I already sent out a message
> regarding an Apache::Scoreboard problem, and now Apache2::Status
> doesn't work either.
it's a bug, but i think its platform specific/ odd
i ran into the same thing a while back
check out this:
http://comments.gmane.org/gmane.comp.apache.mod-perl/24906
i have 2 posts at the bottom, which i'll just paste here:
=====
Jonathan | 13 Aug 00:46
I'm finding some issues with the 2 modules
i think some of it happens when you have a module that has no
subroutines ( ie , a namespace placeholder or something )
check out ~ line 551 in Apache2::Status
adding a few over-the-top checks seems to help, and gets memory use
working on more items
} (sort { $subs->{$b}->{size} <=> $subs->{$a}->{size} } keys %
$subs);
+ return if ! scalar <at> keys;
+ return if ! defined $subs->{$keys[0]};
+ return if ! defined $subs->{$keys[0]}->{count};
+ return if ! defined $subs->{$keys[0]}->{size};
my $clen = length $subs->{$keys[0]}->{count};
my $slen = length $subs->{$keys[0]}->{size};
i'll have more fixes as time progresses
======
Jonathan | 13 Aug 00:56
ok, also found
I also figured this out:
in B::TerseSize, line 634
- my $script = $q->script_name;
+ my $script ;
+ if ( defined $q && $q )
+ {
+ $script = $q->script_name;
+ }
Killing that makes a lot more things work too.
The only caveat of that, is that 'memory usage' doesn't appear on /
perl-status/ until you visit a symdump page that contains memory-
usage. i don't know why. but that should only happen on situations
already afflicted by the other bug. so its a stupid new bug instead
of a bad old one.
==========
// Jonathan Vanasco
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
| 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
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
Re: Instability at startup for Apache2/mod_perl2 using worker MPM
Posted by Perrin Harkins <pe...@elem.com>.
David Scott wrote:
> We will probably be moving to
> DBIx::Class (which is supposed to function well in multithreaded Apache)
> rather than vanilla DBI. If anyone has experience with DBIx::Class on
> mod_perl2 using the worker MPM, we would be grateful to hear from you.
DBIx::Class is just a library that uses DBI, so the threading issues are
not really changed by it. The question for you will be how well your
chosen database library (DBD::whatever) supports running in perl
threads. It may be no problem, or there may be global data structures
on the XS side that make it impossible. You'd be best off asking on the
dbi-users list or a specific list for your DBD module.
- Perrin
Re: Instability at startup for Apache2/mod_perl2 using worker MPM
Posted by David Scott <ds...@earthlink.net>.
Just a note to thank all those who helped me with my three (3) Apache2
problems last week. Here is how it all worked out:
- There was an apparent bug in Scoreboard.xs in Apache::Scoreboard 2.08
that prevented its being loaded into Apache::VMonitor. Malcolm is
looking into this (thanks).
- There was an another glitch in B::TerseSize. Thanks to Philip for
looking into this.
- We decided to go with the prefork MPM for now, at least until we can
get some of our more gnarly platform issues sorted out. In fact, memory
management in Apache2 appears to be vastly improved over Apache1, even
with the prefork MPM, so our performance is already better just with
that change.
We are still interested in the worker MPM, and would appreciate any "war
stories" about thread-safety, etc. We will probably be moving to
DBIx::Class (which is supposed to function well in multithreaded Apache)
rather than vanilla DBI. If anyone has experience with DBIx::Class on
mod_perl2 using the worker MPM, we would be grateful to hear from you.
Again, thanks to everyone.
d
David Scott wrote:
> This is not a good Apache day. I already sent out a message regarding
> an Apache::Scoreboard problem, and now Apache2::Status doesn't work
> either.