Subject: | dump() calls Dumper even if log_level is not matched |
Call of $log->dump( $huge_data_structure ) causes huge memory usage even if log level is not debug.
For test script (attached) 'pmap' and 'time' show the following numbers:
With $log->dump() string:
Show quoted text
> Total 578336 kB
Show quoted text> real 0m10.818s
> user 0m9.259s
> sys 0m0.623s
Without $log->dump() string:
Show quoted text> Total 152060 kB
Show quoted text> real 0m2.057s
> user 0m0.778s
> sys 0m0.072s
Such memory and cpu time usage is caused by Data::Dumper.
Suggested changes: call Dumper() after log level check. To be sure that message should be written to log file.
----
perl version: 5.8.8
Log::Handler version: 0.71
OS: RHEL 2.6.32
----
Subject: | log_handler.pl |
#!/usr/bin/perl
use strict;
use warnings;
use Log::Handler;
my $huge = {};
for my $i (1..1000) {
for my $j (1..1000) {
$huge->{$i}->{$j} = 1;
}
}
my $log = Log::Handler->get_logger( 'test' );
$log->dump( $huge ); # comment this string to decrease memory usage
print "$$\n";
sleep(30);