Skip to content

Instantly share code, notes, and snippets.

@kazeburo
Created September 19, 2014 07:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kazeburo/f52c2a962a7d821bac3f to your computer and use it in GitHub Desktop.
Save kazeburo/f52c2a962a7d821bac3f to your computer and use it in GitHub Desktop.
simple Plack::Middleware::SizeLimit
use strict;
use warnings;
use Plack::Builder;
my $app = sub {
return [200,[],['OK']];
};
builder {
# ここから
enable sub {
my $app = shift;
sub {
my $env = shift;
my $res = $app->($env);
my $size;
if (open my $fh, '<', '/proc/self/statm') {
# cat /proc/22736/statm
# 51226 20496 898 328 0 19380 0
# vsz rss share text lib data dt
my ($vsz, $rss) = split /\s/, scalar <$fh>;
close $fh;
$size = $rss * 4;
}
if ($size && $size > 80_000 ) { # 80MB
$env->{"psgix.harakiri.commit"} = 1;
my @lt = localtime;
my $time = sprintf('%04d-%02d-%02dT%02d:%02d:%02d', $lt[5]+1900,$lt[4]+1,@lt[3,2,1,0]);
$env->{"psgi.errors"}->print(
sprintf('[%s] memory size %s > 80_000KB after request: %s %s',
$time, $size, $env->{HTTP_METHOD}, $env->{PATH_INFO})."\n");
}
return $res;
};
};
# ここまで
$app;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment