代码之家  ›  专栏  ›  技术社区  ›  The Unknown

用于Apache上的实时系统的PHP探查器

  •  6
  • The Unknown  · 技术社区  · 17 年前

    我在Apache服务器上有一个PHP网站,我想知道是否有工具和其他方法可以对其进行分析,以发现代码上的瓶颈。我需要知道的是,处理哪些函数需要很长时间,等等。

    类似于gprof的东西,除了实时apache服务器上的PHP。

    找到PHP系统瓶颈的其他方法有哪些。

    9 回复  |  直到 17 年前
        1
  •  8
  •   Community Mohan Dere    9 年前

    你可以用 xdebug -一旦安装,你可以触发 profiling of requests 通过各种方式,您最终会得到每个请求的valgrind格式配置文件。把这个装进去 WinCacheGrind , KCacheGrind 或者类似的方法,深入挖掘,找出所有时间都花在了哪里!

    alt text

        2
  •  4
  •   pagid    17 年前

    试试XDebug( http://www.xdebug.org/ )您可以在调试会话期间使用get参数触发它。这将创建cachegrind文件,您可以在KCacheGrind或WinCacheGrind中检查这些文件(第一个更好)。。。

        3
  •  3
  •   Mikko Rantalainen    14 年前

    XHProf就是为这个用例设计的。

    XHProf(2009年由Facebook开源)为Facebook的 XHProfLive --实时性能监控系统,从生产层提供功能级别的见解。

    XHProf文档中的一个片段:

    XHProf是一款重量较轻的产品 基于仪器的分析器。在期间 在数据收集阶段,它保持 追踪通话次数,包括 动态模型中圆弧的度量 程序的调用图。它计算 世界上唯一的指标 报告/后处理阶段。 XHProf通过 在调用图中检测循环 数据收集本身和时间 通过提供独特的 深度限定名称

    XHProf的轻量化特性和 聚合功能让它变得更好 适合收集“功能级别” 生产性能统计数据 环境。

    当做 坎南·穆图卡鲁潘

        4
  •  1
  •   KM.    17 年前

    如果您有一个非常有针对性的区域要查看,您可能希望尝试在代码周围散布以下内容:

    $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);
    
        5
  •  1
  •   edik    15 年前

    dtrace的开销很低

    dtrace实际上几乎没有开销,除非启用数千个探测 我想BSD的

        6
  •  1
  •   Your Common Sense    14 年前

    我还要提到 Pinba
    在我看来,它更适合于多台服务器的设置,而不仅仅是一台服务器,但以防您的项目增长。。

        7
  •  0
  •   f00860    17 年前

    你可以用 phpdebug

        8
  •  0
  •   Martijn Heemels    17 年前

    我建议不要构建自己的分析器。有几个优秀的剖析器免费提供,将给你广泛的细节和易于使用。我认为你最好的时间投资是以下组合。我们在我工作的web developent公司使用它,我们对此非常满意:

    1. 这个 Zend Server php堆栈:
      您可以使用免费社区版,并选择要安装的堆栈部分。我们只安装了PHP部分,并且依赖于Linux发行版中的Apache和MySQL。Zend Server提供了一个调试器扩展、一个代码优化器(用于略微提高速度)、一个字节码缓存(用于大幅提高速度)和一个用于管理PHP设置的漂亮GUI。商业版提供了更多信息。通过RPM或DEB软件包,在Linux中安装很容易。

    2. 要使用调试器扩展,您需要一个IDE:
      安装 Zend Studio 这是一个优秀的PHP IDE(请查看features页面),使调试和分析变得非常容易。无需制作cachegrind文件或其他多步骤流程,只需单击Firefox工具栏中的Profile,Studio即可开始评测该页面。细节和易用性都是巨大的。

    也许我听起来像Zend的推销员,也许这听起来比你需要的更多,但我只是一个PHP开发人员,对他使用的工具非常满意。我认为开始使用Studio是很好的时机,但两者的结合让它变得很棒,服务器甚至会大大提高您的实时服务器的速度。在我看来,这个组合只是目前可用的最好的PHP开发环境。查看 demo videos

        9
  •  0
  •   CruiZen    16 年前

    如果在OpenSalARIS上运行,请考虑dTrace。最大的优势可能是,您还可以探索其他层,比如Apache、Mysql。 dtrace的开销很低,您可以有选择地只启用要监视的探测。

    推荐文章