NAME¶
nytprofhtml - Generate reports from Devel::NYTProf data
SYNOPSIS¶
Typical usage:
$ perl -d:NYTProf some_perl_app.pl
$ nytprofhtml --open
Options synopsis:
$ nytprofhtml [-h] [-d] [-m] [-o <output directory>] [-f <input file>] [--open]
DESCRIPTION¶
Devel::NYTProf is a powerful feature-rich Perl source code profiler. See
Devel::NYTProf for details.
"nytprofhtml" generates a set of html reports from a single data file
generated by Devel::NYTProf. (If your process forks you'll probably have
multiple files. See Devel::NYTProf and nytprofmerge.)
The reports include dynamic runtime analysis wherein each line and each file is
analyzed based on the performance of the other lines and files. As a result,
you can quickly find the slowest module and the slowest line in a module.
Slowness is measured in three ways: total calls, total time, and average time
per call.
Coloring is based on absolute deviations from the median. See
<
http://en.wikipedia.org/wiki/Median_absolute_deviation> for more
details.
That might sound complicated, but in reality you can just run the command and
enjoy your report!
COMMAND-LINE OPTIONS¶
- -f, --file <filename>
- Specifies the location of the file generated by Devel::NYTProf. Default:
./nytprof.out
- -o, --out <dir>
- The directory in which to place the generated report files. Default:
./nytprof/
- -d, --delete
- Purge any existing contents of the report output directory.
- -l, --lib <dir>
- Add a path to the beginning of @INC to help nytprofhtml find the source
files used by the code. Should not be needed in practice.
- --open
- Make your web browser visit the report after it has been generated.
If this doesn't work well for you, try installing the Browser::Open
module.
- -m, --minimal
- Don't generate graphviz .dot files or block/sub-level reports.
- --no-flame
- Disable generation of the framegraph on the index page. Also disables
calculation of distinct call stacks that are used to produce the
flamegraph.
- -h, --help
- Print the help message.
SAMPLE OUTPUT¶
You can see a complete report for a large application (over 200 files and 2000
subroutines) at
<
https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-perlcritic-demo/index.html>
The report was generated by profiling perlcritic 1.106 checking its own source
code using perl 5.12.1.
DIAGNOSTICS¶
"Unable to open '... (autosplit into ...)'"¶
The profiled application executed code in a module that used AutoLoader to load
the code from a separate .al file. NYTProf automatically recognises this
situation and tries to determine the 'parent' module file so it can associate
the profile data with it. In order to do that the parent module file must
already be 'known' to NYTProf, typically by already having some code profiled.
You're only likely to see this warning if you're using the "start"
option to start profiling after compile-time. The effect is that times spent
in autoloaded subs won't be associated with the parent module file and you
won't get annotated reports for them.
You can avoid this by using the default "start=begin" option, or by
ensuring you execute some non-autoloaded code in the parent module, while the
profiler is running, before an autoloaded sub is called.
HISTORY¶
A bit of history and a shameless plug...
NYTProf stands for 'New York Times Profiler'. Indeed, this module was initially
developed from Devel::FastProf by The New York Times Co. to help our
developers quickly identify bottlenecks in large Perl applications. The NY
Times loves Perl and we hope the community will benefit from our work as much
as we have from theirs.
Please visit <
http://open.nytimes.com>, our open source blog to see what
we are up to, <
http://code.nytimes.com> to see some of our open projects
and then check out <
http://nytimes.com> for the latest news!
Background¶
Subroutine-level profilers:
Devel::DProf | 1995-10-31 | ILYAZ
Devel::AutoProfiler | 2002-04-07 | GSLONDON
Devel::Profiler | 2002-05-20 | SAMTREGAR
Devel::Profile | 2003-04-13 | JAW
Devel::DProfLB | 2006-05-11 | JAW
Devel::WxProf | 2008-04-14 | MKUTTER
Statement-level profilers:
Devel::SmallProf | 1997-07-30 | ASHTED
Devel::FastProf | 2005-09-20 | SALVA
Devel::NYTProf | 2008-03-04 | AKAPLAN
Devel::Profit | 2008-05-19 | LBROCARD
Devel::NYTProf is a (now distant) fork of Devel::FastProf, which was itself an
evolution of Devel::SmallProf.
Adam Kaplan took Devel::FastProf and added html report generation (based on
Devel::Cover) and a test suite - a tricky thing to do for a profiler.
Meanwhile Tim Bunce had been extending Devel::FastProf to add novel per-sub
and per-block timing, plus subroutine caller tracking.
When Devel::NYTProf was released Tim switched to working on Devel::NYTProf
because the html report would be a good way to show the extra profile data,
and the test suite made development much easier and safer.
Then he went a little crazy and added a slew of new features, in addition to
per-sub and per-block timing and subroutine caller tracking. These included
the 'opcode interception' method of profiling, ultra-fast and robust inclusive
subroutine timing, doubling performance, plus major changes to html reporting
to display all the extra profile call and timing data in richly annotated and
cross-linked reports.
Steve Peters came on board along the way with patches for portability and to
keep NYTProf working with the latest development Perl versions.
Adam's work is sponsored by The New York Times Co.
<
http://open.nytimes.com>. Tim's work was partly sponsored by Shopzilla.
<
http://www.shopzilla.com>.
SEE ALSO¶
Mailing list and discussion at
<
http://groups.google.com/group/develnytprof-dev>
Public SVN Repository and hacking instructions at
<
http://code.google.com/p/perl-devel-nytprof/>
Devel::NYTProf, Devel::NYTProf::Reader, nytprofcsv
AUTHOR¶
Adam Kaplan, "<akaplan at nytimes.com>".
Tim
Bunce, <
http://www.tim.bunce.name> and
<
http://blog.timbunce.org>.
Steve Peters, "<steve at
fisharerojo.org>".
COPYRIGHT AND LICENSE¶
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself, either Perl version 5.8.8 or, at your option,
any later version of Perl 5 you may have available.