使用 NYTProf 对 foswiki 进行剖析会导致剖析数据不完整
Posted
技术标签:
【中文标题】使用 NYTProf 对 foswiki 进行剖析会导致剖析数据不完整【英文标题】:Profiling foswiki with NYTProf results in incomplete profile data 【发布时间】:2015-11-11 21:37:34 【问题描述】:我有一个非常慢的 foswiki 安装(未缓存页面大约需要 60 秒)。根据http://foswiki.org/Support/NYTProfDebugging,我尝试使用 NYTProf 分析安装,使用以下命令:
> sudo -u www-data NYTPROF="file=/tmp/nytprof.out:addpid=1:endatexit=1" perl -wTd:NYTProf view -topic Some.Topic -username MyUsername
当我使用分析器运行脚本时,脚本失败并显示退出代码141
。如果我在没有分析器的情况下运行它(远程 d:NYTProf
),它会成功退出并产生输出。
分析后,我在 /tmp 目录中获得了一堆配置文件:
nytprof.out.[841-1860]
但是当我尝试合并这些文件时,我收到第一个文件的错误:
> nytprofmerge 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)
我可以在没有第一个文件的情况下合并文件,但结果没有用,并且只显示了对 Foswiki::Sandbox::CORE:open
的 87 次调用,仅此而已。
我是否有机会获得有效的分析结果?或者在这种情况下我可以使用其他工具吗?
【问题讨论】:
【参考方案1】:我不确定您为什么不能让 NYTProfiler 工作,我们已经使用它来解决 Foswiki 2.0.2 中的一些性能问题,这些问题已在 Foswiki 2.0.3 中得到部分解决。有几个问题正在发生,但一个主要原因是我们在内部转换为 UNICODE,以及 5.20 之前的 perl 版本中的一些 Perl 正则表达式问题。 https://rt.perl.org/Public/Bug/Display.html?id=66852
Foswiki 2.0.3 进行了以下性能更新:
将一些重调用的内部函数从正则表达式更改为 index() 更改了 EditRowPlugin 以生成更少的 html,需要在渲染模块中通过正则表达式进行处理。 进行了一些其他改进,以减少对主题的过度重读。如果 2.0.3 没有显着帮助,请检查问题页面中是否有大表。如果是这样,您可以尝试禁用 EditRowPlugin 并使用 EditTablePlugin。
除此之外,您还可以尝试我们在 IRC 上的官方支持频道#foswiki,http://irclogs.foswiki.org/
【讨论】:
【参考方案2】:当我使用探查器运行脚本时,该脚本失败并显示退出代码 141。
这表明进程收到了 SIGPIPE 信号。 sigexit 选项可能会有所帮助。
如果我在没有分析器的情况下运行它...它会成功退出并产生输出。
您使用的是sudo
,因此权限可能是个问题,但这只是猜测。您需要深入挖掘以确认是否收到了 SIGPIPE 以及原因。
我不熟悉 foswiki。也许该社区中的某个人会更有帮助。
【讨论】:
谢谢,sigexit
选项产生了有效的分析结果,但由于执行被中止,结果不是很有用。我对perl没有太多经验。我唯一的假设是这可能是内存问题?以上是关于使用 NYTProf 对 foswiki 进行剖析会导致剖析数据不完整的主要内容,如果未能解决你的问题,请参考以下文章
在 fork/execs 的程序上使用 Devel::NYTProf