当我查看Devel :: NYTProf v4 的输出以获得CGI程序时,我遇到diagnostics.pm
了报告源代码文件 - 按专用时间排序然后命名.
首先,我不明白为什么会出现在生产代码中.我在报告中深入挖掘并发现它被称为main::BEGIN@17
.反过来,这是以下行:
# spent 34µs (26+8) within main::BEGIN@15 which was called: # once (26µs+8µs) by main::RUNTIME at line 15
use strict;
# spent 34µs making 1 call to main::BEGIN@15 # spent 8µs making 1 call to strict::import
# spent 36µs (17+19) within main::BEGIN@16 which was called: # once (17µs+19µs) by main::RUNTIME at line 16
use warnings;
# spent 36µs making 1 call to main::BEGIN@16 # …
Run Code Online (Sandbox Code Playgroud) 这个问题是关于Devel::NYTProf
探查者的.
我从分析器接收到的简单行的输出,例如:
use strict;
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
statements: 3
Time on Line: 22µs
Calls: 2
Time in Sub: 12µs
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
先感谢您
我有一个Perl CGI应用程序,有时超时,导致它被Apache杀死,并将504 Gateway Time-out
错误发送到浏览器.我试图使用NYTProf来描述这个应用程序,但我无法读取配置文件数据:
$ nytprofhtml -f www/cgi-local/nytprof.out
Reading www/cgi-local/nytprof.out
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated (refer to TROUBLESHOOTING in the documentation)
Run Code Online (Sandbox Code Playgroud)
我正在使用sigexit=1
NYTProf选项.这是重现问题的最小CGI脚本:
#!/usr/bin/perl -d:NYTProf
sleep 1 while 1;
Run Code Online (Sandbox Code Playgroud) 首先我export PERL5OPT=-d:NYTProf
从命令行,以便我的调试选项将由子进程继承.然后我启动我的Perl程序联系.它分叉成为一个守护进程,然后fork/execs另一个Perl程序的九个实例table_manager.(exec看起来像exec /path/to/perl /path/to/table_manager
.)此时我可以看到10或11个名为nytprof.out的新文件.nnnn ; 正如预期的那样,现在已经分叉的每个进程都有一个.
客户端连接到contactd fork/execs slave,后者又连接到九个表管理器并接受来自客户端的请求并将它们传递给九个表管理器.
运行典型的客户端连接后,我关闭所有服务器进程.我运行nytprofmerge来合并各种nytprof.out.将nnnn文件导入nytprof-merged.out,然后运行nytprofhtml -f nytprof-merged.out --open
.
当HTML报告打开时,除了联系之外我什么也没看到.顶级子程序主要是BEGIN块,导入,AUTOLOAD ......早期执行的东西.
这使我觉得NYTPROF 是跨fork(基于多个nytprof.out文件)去,但由于某种原因不能继续来剖析EXEC "编Perl程序.
我在MacOSX 10.8.2中运行perl 5.16.1和最新的Devel :: NYTProf.
关于我没做过的任何建议?
我完全搞不清楚杰韦利:: NYTProf报告所产生nytprofhtml.我使用旧版NYTProf 1.90.我知道这是一个非常古老的版本,但应该出于多种原因使用它.
所以这些HTML报告看起来像这样(当查看特定的*.pl文件报告时):
|Line|Stmts.| Time | Avg. |Code|
|42 | 6804 | 0.04506 | 7e-06 | }; |
Run Code Online (Sandbox Code Playgroud)
我从未见过新版本的nytprofhtml的报告,所以不确定它们是否看起来一样.
在我的情况下,这一行是整个程序中最慢的部分(它不是一个小程序).所以我的问题是如何声明这样'};' 在程序中最慢的部分有更复杂的语句.我认为误解了NYTProf的报道.
如果我的问题令人困惑,请告诉我这些报告中每列的定义,这会有所帮助吗?这将有很大帮助.
特别是我很感兴趣Stmts
.意思.我猜,但我不想猜!
提前致谢.
在我的应用程序中,我有多个过程。最初,我通过运行.pl文件启动一个Perl进程,然后依次调用另外两个.pl脚本来创建2个新进程。如何使用Profile这样的代码。我做了NYTProf,合并了结果并用html打开,但是所有与功能有关的分析信息都丢失了。剖析此类应用程序的信息会有所帮助吗?