我在Apache服务器上有一个PHP网站,我想知道是否有工具和其他方法我可以对此进行分析以找到代码的瓶颈。我需要知道的是,功能需要很长时间才能处理等等。
像gprof这样的东西,除了live apache服务器上的PHP。
在PHP系统中找到瓶颈的其他方法有哪些。
答案 0 :(得分:8)
您可以使用xdebug - 一旦安装,您可以通过各种方式触发profiling of requests,并为每个请求结束valgrind格式配置文件。将其加载到WinCacheGrind,KCacheGrind或类似内容中,然后向下钻取以查找所有时间花在哪里!
答案 1 :(得分:4)
尝试XDebug(http://www.xdebug.org/)您可以在调试会话期间使用get参数触发它。这将创建cachegrind文件,你可以在KCacheGrind或WinCacheGrind中检查(这首先要好得多)......
答案 2 :(得分:3)
XHProf专为此用例而设计。
XHProf(2009年由Facebook开源)为Facebook的XHProfLive提供支持 - 这是一个实时性能监控系统,可提供来自生产层的功能级别的洞察力。
来自XHProf doc的片段:
XHProf重量轻 基于仪器的分析器。中 它保留了数据收集阶段 跟踪通话计数和包容性 动态中弧的度量 程序的调用图。它计算 独家指标 报告/后处理阶段。 XHProf通过处理递归函数 检测呼叫图中的周期 数据收集时间本身和 通过给予独特来避免循环 深度合格的名称 递归调用。
XHProf的重量轻和性质 聚合功能很好 适合收集“功能级别” 来自生产的绩效统计 的环境中。
的问候, Kannan Muthukkaruppan
答案 3 :(得分:1)
如果你有一个非常有针对性的区域,你可能想尝试在你的代码周围撒一些:
$f_timeStart=microtime(true);
$f_timeLast=$f_timeStart;
error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 before xyz()'."\n", 3, '/var/tmp/my-errors.log');
$f_timeLast=microtime(true);
xyz();
error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 after xyz()'."\n", 3, '/var/tmp/my-errors.log');
$f_timeLast=microtime(true);
答案 4 :(得分:1)
实际上,除非启用数千个探测器,否则dtrace的开销几乎为零 认为它也可以在BSD上找到dtrace的开销很低
答案 5 :(得分:1)
我还要提一下Pinba
在我看来,它更适合多个服务器设置,而不仅仅适用于一个服务器,但是如果您的项目增长..
答案 6 :(得分:0)
您可以使用phpdebug完成此项工作。这是一个php扩展。
答案 7 :(得分:0)
我建议不要建立自己的探查器。有几种优秀的分析仪可供免费使用,它们将为您提供广泛的细节和易用性。我认为您的最佳投资时间是以下组合。我们在我工作的网络开发公司使用它,并对它非常满意:
Zend Server php堆栈:
您可以使用免费的Community Edition,并选择要安装的堆栈部分。我们只安装了PHP部分,并依赖Linux发行版中的Apache和MySQL。 Zend Server提供了一个调试器扩展,一个代码优化器(用于轻微的速度提升),一个字节码缓存(用于显着的速度提升)和一个用于管理PHP设置的漂亮GUI。商业版提供了更多。通过RPM或DEB软件包可以轻松安装Linux。
要使用Debugger扩展,您需要一个IDE:
安装Zend Studio这是一个优秀的PHP IDE(查看功能页面),并使调试和分析非常容易。无需制作cachegrind文件或其他多步骤进程,只需在Firefox和工具栏中单击“配置文件”即可开始分析该页面。细节和易用性都很大。
也许我听起来像是一个Zend推销员,也许这听起来比你需要的更多,但我只是一个PHP开发人员,对他使用的工具非常满意。我认为现在花费很多时间来开始使用Studio,但这种组合使它变得非常棒,Server甚至可以加速你的实时服务器。在我看来,这个组合只是目前最好的PHP开发环境。查看demo videos。还有一个关于剖析的文章。
答案 8 :(得分:0)
如果您在OpenSolaris上运行,请考虑使用dtrace。最大的优势可能是您还可以探测其他层,如Apache,Mysql。 dtrace的开销很低,您可以选择性地仅启用要监视的探测器。