【问题标题】:Profiling foswiki with NYTProf results in incomplete profile data使用 NYTProf 对 foswiki 进行剖析会导致剖析数据不完整
【发布时间】: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 次调用,仅此而已。

我是否有机会获得有效的分析结果?或者在这种情况下我可以使用其他工具吗?

【问题讨论】:

    标签: perl foswiki devel-nytprof


    【解决方案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没有太多经验。我唯一的假设是这可能是内存问题?
      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2012-01-31
      相关资源
      最近更新 更多