NAME
plackbench - Benchmarking/Debugging tool for Plack web requests
SYNOPSIS
# Make a request 5 times, and print some stats
$ plackbench -n 5 /path/to/app.psgi '/search?q=stuff'
# Debug the same request
$ PERL5OPT=-d plackbench -n 5 /path/to/app.psgi '/search?q=stuff'
# Profile the same request
$ PERL5OPT=-d:NYTProf plackbench -n 5 /path/to/app.psgi '/search?q=stuff'
$ nytprofhtml -m
DESCRIPTION
This script benchmarks a web request. It hits the Plack app directly without going through a web server.
This is somewhat useful on it's own for getting an idea of the time spent in Perl-land for a web request. But it's mostly a harness for a debugger or profiler.
USAGE
plackbench /path/to/app.psgi URI
The first positional argument is the path to a .psgi file. The second is the URL to request.
The URI is relative to the application root.
OPTIONS
- -n
-
Number of times to execute the request. Defaults to 1.
- --warm
-
Make an initial request that won't be included in the stats.
- --post=<file>
-
Make a POST request instead of a GET. Pass the path to a file with the raw URL-encoded POST data. If the file contains multiple lines, each will be used a separate POST request.
If the file is a '-', the POST body will be read from STDIN.
- -e <code>
-
Pre-process the request using the Perl code passed.
$_
will be set to a HTTP::Request object.For example, to set the User-Agent:
plackbench -e '$_->header("User-Agent" => "Mozilla")' /path/to/app.psgi /
- -f <file>
-
Like
-e
, however the code is read from a file. Should return a code reference, which will be passed aHTTP::Request
object.A simple example:
sub { my $request = shift; $request->header( Cookie => 'session=mysid' ); return; }
The file can contain any valid Perl code, but the last statement in the file must be a subroutine reference.
- -p <precision>
-
The number of decimal places in times included in the report. Defaults to 3.
Using with Devel::NYTProf
Just invoking the script through NYTProf is all that's necessary:
PERL5OPT=-d:NYTProf plackbench /path/to/app.psgi '/search?q=stuff'
In some applications, startup costs can overshadow the actual request in the report. If this happens prevent NYTProf from starting by default:
NYTPROF=start=no PERL5OPT=-d:NYTPRof plackbench /path/to/app.psgi '/search?q=stuff'
The script will call DB::enable_profile()
to start NYTProf before executing any requests. Which removes the startup code from the final report.
If the --warm
flag is used, DB::enable_profile()
will be called after the initial request.
See Devel::NYTProf for more information.
AUTHOR
Paul Boyd <boyd.paul2@gmail.com>
Currently maintained by Bartosz Jarzyna <bbrtj.pro@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Paul Boyd.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.