Leaky Rakudo
Yesterday the discord-bridge-bot refused to perform its 2nd job: EVAL All The Things! The EVALing is done via shell-out and requires a fair bit of RAM (Rakudo is equally slim then Santa). After about 3 weeks the fairly simple bot had grown from about halve a GB to one and a halve – while mostly waiting for the intertubes to deliver small pieces of text. I complained on IRC and was advised to take heap snapshots. Since I didn’t know how to make heaps of snapshots, I had to take timo’s directions towards use Telemetry
. As snap(:heap)
wasn’t willing to surrender the filename of the snapshot (I want to compress the file, it is going to get big over time) I had a look at the source. I also requested a change to Rakudo so I don’t have to hunt down the filename, which was fulfilled by lizmat 22 minutes later. Since you may not have a very recent Rakudo, the following snipped might be useful.
multi sub postfix:<minute>(Numeric() \seconds) { seconds * 60 }
multi sub postfix:<minutes>(Numeric() \seconds) { seconds * 60 }
multi sub postfix:<hour>(Numeric() \seconds) { seconds * 3600 }
multi sub postfix:<hours>(Numeric() \seconds) { seconds * 3600 }
multi sub postfix:<day>(Numeric() \seconds) { seconds * 86400 }
multi sub postfix:<days>(Numeric() \seconds) { seconds * 86400 }
start react whenever Supply.interval(1day) {
note ‚taking snapshot‘;
use Perl6::Compiler:from<NQP>;
sub compress(Str() $file-name) { run «lz4 -BD --rm -qf $file-name» }
my $filename = 'raku-bot-' ~ now.DateTime.&{ .yyyy-mm-dd ~ '-' ~ .hh-mm-ss } ~ '.mvmheap';
Perl6::Compiler.profiler-snapshot(kind => "heap", filename => $filename<>);
$filename.&compress or warn(‚compression failed‘);
note ‚done‘;
}
If you got a long running MoarVM process, please consider to check if it slowly fills all RAM and provide the snapshots to #rakudev.
-
November 29, 2021 at 19:282021.48 Raku at FOSDEM 2022 – Rakudo Weekly News