Profiling

Dirk Koopman djk at tobit.co.uk
Wed Jan 4 22:12:20 CET 2012


Any suggestions for profiling large perl programs that use AnyEvent?

Profile stops thusly:

djk at dirk6:~/spider/perl$ perl -d:Profile ./cluster.pl
cluster
DXSpider V1.56, build 0.16 (git: fb8e4bc) started
Copyright (c) 1998-2012 Dirk Koopman G1TLH
loading prefixes ...
US Database not loaded
loading band data ...
loading user file system ...
Use of uninitialized value $c[1] in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
Use of uninitialized value in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
Use of uninitialized value $c[1] in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
  at /usr/share/perl5/Devel/Profile.pm line 123
Use of uninitialized value $c[1] in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
Use of uninitialized value in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
Use of uninitialized value in concatenation (.) or string at 
/usr/share/perl5/Devel/Profile.pm line 123.
  at /usr/share/perl5/Devel/Profile.pm line 123
starting listeners ...
Unable to create sub named "" at /usr/local/lib/perl/5.12.4/AnyEvent.pm 
line 1521.
  at /usr/local/lib/perl/5.12.4/AnyEvent.pm line 1521
	AnyEvent::__ANON__[/usr/local/lib/perl/5.12.4/AnyEvent.pm:1522]('AnyEvent', 'fh', 'GLOB(0xad46a14)', 'poll', 'r', 'cb', 'CODE(0xad468ac)') called at (eval 3)[/usr/local/lib/perl/5.12.4/AnyEvent.pm:1557] line 6
	AE::io('GLOB(0xad46a14)', 0, 'CODE(0xad468ac)') called at 
/usr/local/lib/perl/5.12.4/AnyEvent/Socket.pm line 1196
	AnyEvent::Socket::tcp_server('::1', 27754, 'CODE(0xad46d84)', 
'CODE(0xad4694c)') called at /spider/perl/Msg.pm line 319
	Msg::new_server('IntMsg', '::1', 27754, 'CODE(0xac2df60)') called at 
./cluster.pl line 462
Unable to create sub named "" at /usr/local/lib/perl/5.12.4/AnyEvent.pm 
line 1521.

The offending code is:

sub new_server {
     @_ == 4 || die "Msg->new_server (myhost, myport, login_proc)\n";
     my ($pkg, $my_host, $my_port, $login_proc) = @_;
     my $self = $pkg->new($login_proc);

     $self->{sock} = tcp_server $my_host, $my_port, sub { 
$self->new_client(@_); };
     die "Could not create socket: $! \n" unless $self->{sock};
     return $self;
}

which is slightly better than DProf which does:

perl -d:DProf ./cluster.pl
cluster
DXSpider V1.56, build 0.16 (git: fb8e4bc) started
Copyright (c) 1998-2012 Dirk Koopman G1TLH
loading prefixes ...
US Database not loaded
loading band data ...
loading user file system ...
starting listeners ...
Segmentation fault

Neither yield a cigar...

Dirk



More information about the anyevent mailing list