The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Middleware::SizeLimit - Terminate processes if they grow too large

SYNOPSIS

    use Plack::Builder;

    builder {
        enable SizeLimit => (
            max_unshared_size_in_kb => '4096', # 4MB
            # min_shared_size_in_kb => '8192', # 8MB
            # max_process_size_in_kb => '16384', # 16MB
            check_every_n_requests => 2,
            log_when_limits_exceeded => 1,
            callback => sub {
               my ($size, $share, $unshared) = @_;
               ...
            },
        );
        $app;
    };

DESCRIPTION

This middleware is a port of the excellent Apache::SizeLimit module for multi-process Plack servers, such as Starman, Starlet, Gazelle and uWSGI.

This middleware only works when the environment psgix.harakiri is set to a true value by the Plack server. If it's set to false, then this middleware simply does nothing.

You must use at least version 0.2006 of Starman (July 2010), and 0.19 of Starlet (June 2013). Earlier versions ignore the flag to stop the process.

CONFIGURATIONS

max_unshared_size_in_kb

The maximum amount of unshared memory the process can use; usually this option is all one needs.

Experience on one heavily trafficked mod_perl site showed that setting this option and leaving the others unset is the most effective policy.

This is because it only kills off processes that are truly using too much physical RAM, allowing most processes to live longer and reducing the process churn rate.

min_shared_size_in_kb

Sets the minimum amount of shared memory the process must have.

max_process_size_in_kb

The maximum size of the process, including both shared and unshared memory.

check_every_n_requests

Since checking the process size can take a few system calls on some platforms (e.g. linux), you may specify this option to check the process size every N requests. The default value for N is 1, i.e. to check after the processing of every request.

log_when_limits_exceeded

When true, the middleware will log a warning whenever it signals to the server that the process is to be terminated. This is false by default.

callback

A reference to a subroutine that takes the process size information. This can be used to feed this information into a monitoring system, such as statsd.

SEE ALSO

Starman, Starlet, Gazelle

AUTHORS

Audrey Tang <cpan@audreyt.org>

LICENSE

This work is under the CC0 1.0 Universal license.

To the extent possible under law, 唐鳳 has waived all copyright and related or neighboring rights to Plack::Middleware::SizeLimit.

This work is published from Taiwan.

http://creativecommons.org/publicdomain/zero/1.0