in reply to forked process silently dies without coredump. No clue what's going on

What's puzzling me here actuall is the 2nd and following print of the Dumper so the lines starting with "... re-check system load" which pints just $load = $load instead of $load = { .... }

Data::Dumper remembers which references it's already output, and will just output a "reference" to the previous variabledata structure if you dump it twice. Use its ->Reset method to reset its Seen cache.

use Data::Dumper; my $load = { foo => 123 }; my $dumper = Data::Dumper->new([$load],[qw($load)]); print $dumper->Dump(); # $load = { 'foo' => 123 }; print $dumper->Dump(); # $load = $load; $dumper->Reset; print $dumper->Dump(); # $load = { 'foo' => 123 };
eval { ... }; if ($@) { ...

See Bug in eval in pre-5.14, although I'm not sure if this has anything to do with your issues. Why do you have the eval in the first place? The only thing I see where I would consider dieing realistic is the call to loadavg(), although you don't guard the first call to that function. And since you haven't shown that function, we can't tell if that might be the source of the issues.

As for the actual problem, this seems like it may be a case for stripping down the code to a minimal SSCCE that reproduces the issue. This will help you narrow down the source of the problems. For example, to make sure that it isn't something strange with the logging, perhaps remove that, and add your own simple print statements to a file (with autoflush turned on). From the code you've shown, I'm not able to see what else the issue might be - maybe another Monk does, but the major advantage of a Short, Self-Contained, Correct Example is that we just can download and run it to reproduce the issue on our end.

Update: Also, what's happening with STDOUT and especially STDERR of this process, do you have the ability to see that somewhere?