# 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)])); } #### 2019/10/24 04:56:21 DEBUG [29280] Enabling Auto Backtrace with output directory: '/tmp/cores' 2019/10/24 04:56:21 DEBUG [29280] check load is running from directory: '/' 2019/10/24 04:56:21 DEBUG [29280] current system load is: $load = { 'avg_5' => '2.34', 'avg_1' => '2.31', 'avg_15' => '2.28' }; 2019/10/24 04:56:21 INFO [29280] waiting for loads to drop below '1 min=4.0, 5 min=2.0' 2019/10/24 04:56:26 DEBUG [29280] about to call "loadavg" 2019/10/24 04:56:26 DEBUG [29280] ... re-ckeck system load: $load = $load; 2019/10/24 04:56:31 DEBUG [29280] about to call "loadavg" 2019/10/24 04:56:31 DEBUG [29280] ... re-ckeck system load: $load = $load;