# config my $avg1_limit = '4.0'; my $avg5_limit = '2.0'; sub check_load { DEBUG("Enabling Auto Backtrace with output directory: '" . $tmp_dir . "'"); Debug::FaultAutoBT->new(dir => "$tmp_dir")->ready; my $current_dir = getcwd; DEBUG("check load is running from directory: '" . $current_dir . "'"); my @avgs = loadavg(); my $load = { avg_1 => $avgs[LOADAVG_1MIN], avg_5 => $avgs[LOADAVG_5MIN], avg_15 => $avgs[LOADAVG_15MIN] }; my $dumper = Data::Dumper->new([$load],[qw($load)]); DEBUG("current system load is: " . $dumper->Dump()); INFO("waiting for loads to drop below '1 min=$avg1_limit, 5 min=$avg5_limit'"); eval { while ($load->{'avg_1'} > $avg1_limit or $load->{'avg_5'} > $avg5_limit) { sleep(5); DEBUG('about to call "loadavg"'); @avgs = loadavg(); $load = { avg_1 => $avgs[LOADAVG_1MIN], avg_5 => $avgs[LOADAVG_5MIN], avg_15 => $avgs[LOADAVG_15MIN] }; DEBUG("... re-ckeck system load: " . $dumper->Dump()); } }; if ($@) { ERROR "failed checking load, error: $@"; } else { DEBUG "while loop ended nicely"; } INFO("finished waiting, system load is now: " . Data::Dumper->Dump([$load],[qw($load)])); }