gggeek / ezperformancelogger
一个用于测量eZ Publish网站性能的扩展
Requires
Requires (Dev)
Suggests
- monolog/monolog: can be used to log the measured performance data to many different media
- php-xhprof: a good profiler for php, designed to be fast enough to be used in production settings
README
本工具旨在测量eZ Publish网站的性能。
性能测量旨在在生产环境中使用。它可以在ezdebug关闭的情况下工作,并尽量轻量,以免因测量而过多减慢服务器速度。因此,默认情况下,它不会将性能数据存储到数据库中,而是作为现有Apache日志的一部分。测量性能数据的大小可以完全配置,以及存储它的机制。
从版本0.4开始,它还充当性能分析工具,这意味着您可以获得比标准调试输出更详细的信息,包括钻取功能和调用图。
对于普通读者请注意:性能分析意味着测量网页执行的所有PHP函数调用,这非常耗时。它仅应在开发环境中使用,不应在生产环境中使用。
要求
- eZP >= 4.6或5.X运行在纯-传统堆栈模式下(注意:当eZ5不在仅传统堆栈模式下运行时,您需要安装eZPerformanceLoggerBundle)
- 推荐使用apache web服务器
- 可选:piwik或ga账户
- 可选:xhprof分析器和graphviz
- 可选:Monolog库及其依赖项
安装
请参阅INSTALL.md文档
工作原理:性能日志记录
-
通过记录性能指标(也称为KPI)- 对于每次页面查看 - 目前支持的指标包括:
- 总执行时间
- 总内存使用量
- 数据库查询次数
- 所有现有的eZ4累加器(仅在调试模式下)
- 任何现有的eZ4 "事件"触发的次数
- eZ4数据库访问、集群数据库访问和imagemagick转换时间(仅通过使用特殊的连接器类)
- 开发人员使用PHP代码或模板代码设置的定制指标
- 来自$module_result的任何数据(对于eZ 5.x,这需要在pagelayout中添加一些模板代码)
-
数据记录可以指向不同的媒介
- Apache访问日志
- piwik网络分析引擎
- google分析引擎
- 单独的日志文件(Apache日志格式)
- 单独的日志文件(csv格式)
- Monolog日志库
- Pinba服务器
- Odoscope服务器
- Statsd服务器
- http响应头(对Nginx日志很有用)以及未来可能更多。
建议将日志记录到Apache访问日志中,原因有很多:默认情况下,Apache日志会自动轮转,因此您不会冒用尽磁盘空间的风险,并且在那里记录日志时,IO性能损失较小,因为日志文件无论如何都会被写入。
-
为简化在Apache日志中保存的性能数据的统计使用,提供了一个友好的cronjob/命令行脚本:updateperfstats。它可以在两阶段性能分析场景中使用
第一阶段:启用并配置ezperformanceogger以将日志记录到Apache日志或自定义日志文件中;执行负载测试
第二阶段:运行php扩展/ezperformancelogger/bin/php/updateperfstats.php来解析Apache访问日志并生成CSV文件;将此CSV文件导入您首选的电子表格工具或数据库
如果您不太在意非常小的性能损失,您可以直接将性能数据记录到csv格式的日志文件中,并跳过updateperfstats.php脚本的执行。
注意:该扩展不提供可视化记录数据的方式,您需要使用外部工具
- 对于流式传输到Apache日志或单独日志文件中的数据,需要能够导入CSV文件的电子表格程序
- 对于流式传输到piwik、ga、odoscope或statsd/graphite的数据,请使用分析工具的Web界面
注意
-
测量的脚本运行时间略短于现实,因为我们不能在PHP进程执行的开始和结束时挂钩
-
测量的时间四舍五入到毫秒
-
测量的RAM使用量四舍五入到1000字节
-
默认情况下,只有在开启调试输出时才能测量执行的数据库查询。我们提供了一个替代的db-connector类,仅适用于eZ 4.4-5.3 / mysqli,当关闭调试输出时,可用于测量详细的数据库信息(请参阅site.ini和ezperformancelogger.ini文件以获取详细信息)
-
默认情况下,以重定向结束或在进行视图时终止执行的eZ页面不会记录数据。要强制测量这些页面,您必须修补index.php文件并向其中添加以下行:eZPerfLogger::registerShutdownPerfLogger();理想的位置是现有的eZExecution::addCleanupHandler调用旁边。
对于Legacy-Stack-Only模式的eZ 5.x,这位于ezpkernelweb.php中,大约在191行;请注意,在这种情况下,测量的数据可能低于预期,您还应该修补ezpkernelweb::runCallback()以避免通过调用eZPerfLogger::disable()和reenable()来测量数据。
对于任何其他模式的eZ 5.x,您不需要做任何事情 - 它只是正常工作并记录重定向页面。
如果您不想修改内核并且使用自定义数据库连接器,您只需在ezperformacelogger.ini中设置AlwaysRegisterShutdownPerfLogger=enabled即可
如何工作:性能分析
-
需要XHProf PECL扩展来获取性能分析信息
-
性能分析在config.php页面执行开始时启用,并在页面结束前稍作停止。因此,它不是100%准确的
-
性能分析信息保存在var/log/xhprof目录下的文件中
-
在页面底部通过javascript添加了一个链接来查看详细的性能分析信息
-
所有性能分析数据都存储起来,可以稍后查看。它可通过管理界面的“设置”选项卡访问
-
性能分析可以独立于性能日志启用/禁用,但启用时,记录的内存或执行时间数字将没有用处
-
有关XHProf的更多信息,Google是您的朋友
注意
- 性能分析信息未分组。它仅可在生成它的Web服务器上可用
类似工具
有许多应用性能管理解决方案,它们可以执行更多此类扩展的功能。一个非常好的(但并非完全免费)APM工具是NewRelic。
对于应用程序性能分析,除了XHProf和XDebug之外,还有(但并非完全免费)Blackfire.io。