#! perl # restart server when certain resource limits are exceeded # TODO, CONF framework? our $MAX_VMSIZE = $cf::CFG{checkrusage}{vmsize} || 1_000_000_000; $^O eq "linux" or die "only linux supported right now.\n"; our $STAT_FH; our $TIMER; cf::post_init { cf::async_ext { $STAT_FH = Coro::AIO::aio_open "/proc/self/stat", IO::AIO::O_RDONLY, 0 or return; $TIMER = cf::periodic 10, sub { sysseek $STAT_FH, 0, 0; sysread $STAT_FH, my $stat, 4096; # only a single line my $vmsize = (split / /, $stat)[22]; cf::cleanup "memory usage growing high ($vmsize > $MAX_VMSIZE), server would run out of memory soon", 0 if $vmsize >= $MAX_VMSIZE; }; }; };