分析在 apache 中运行的 PHP

Posted

技术标签:

【中文标题】分析在 apache 中运行的 PHP【英文标题】:Profiling PHP running in apache 【发布时间】:2010-11-23 08:38:35 【问题描述】:

我想知道在 apache 上运行的应用程序调用了哪些函数以及每个请求所用的时间。

是否有任何工具或任何其他方式可以获取这些数据。 我也想知道每个函数需要多少时间。

应用程序正在运行,无法停止。 所以我需要在运行环境本身中获取详细信息。 提前致谢。

【问题讨论】:

问题含糊不清,您是指分析 apache 内部函数调用还是在 apache 上运行的网页?以及涉及的任何编程语言? 我想分析内部函数调用。编程语言是 php,数据库是 mysql 【参考方案1】:

最常用的行业工具之一是:http://www.xdebug.org/

我已经虔诚地使用它很长时间了!从它的首页,它执行以下操作:

“Xdebug 扩展通过提供大量有价值的调试信息来帮助您调试脚本。Xdebug 可以提供的调试信息包括:

* stack traces and function traces in error messages with:
      o full parameter display for user defined functions
      o function name, file name and line indications
      o support for member functions
* memory allocation
* protection for infinite recursions"

【讨论】:

【参考方案2】:

Xdebug 可以write a profiling file,你可以在kcachegrind 或wincachegrind 中分析。

【讨论】:

【参考方案3】:

这取决于您是想要 active 还是 passive 分析。

New Relic 等被动工具在后台静默工作,并通过牺牲少量计算资源来收集有关所有请求的少量信息。这些通常具有有关整个服务器堆栈的更多信息。这些通常用于生产环境,这听起来像是您需要的。

活动分析器用于开发,每个请求只运行一次,收集大量关于您正在处理的应用程序部分的信息,但代价是性能受到很大影响。最常见的 PHP 主动分析器可能是 Xdebug。

从 Xdebug 分析数据的方法:

注意:如果您使用虚拟机、vagrant、docker 等,请确保将输出目录设置为共享卷,可在虚拟机外部访问

例如

(php.ini)xdebug.profiler_output_dir = "/project_root/tmp"

如果你使用 PHPStorm:

Tools > Analyse Xdebug Profiler snapshot...

对于那些在MacOS 上使用 Xdebug 的人:

使用自制软件安装 qcachegrind 和 AppViz

brew install qcachegrind

brew install graphviz

然后从命令行运行它:

qcachegrind cachegrind.out.1394

或者只运行 qcachegrind 并使用 GUI 导航器打开 xdebug 生成的 cachegrind 文件

【讨论】:

【参考方案4】:

有几个 PHP 分析工具, 比如

xdebug Particletree

【讨论】:

以上是关于分析在 apache 中运行的 PHP的主要内容,如果未能解决你的问题,请参考以下文章

Apache不能解析php文件的分析

PHP服务器Apache与Nginx的对比分析

apache错误日志-按类型分析php错误

php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式浅谈

Apache漏洞利用与安全加固实例分析

apache2.4编译安装,搭建虚拟主机日志分析及访问控制