如何在生产环境中分析请求?
Posted
技术标签:
【中文标题】如何在生产环境中分析请求?【英文标题】:How to profile a request in a production environment? 【发布时间】:2018-01-10 23:00:08 【问题描述】:我想在请求期间获取每个调用的方法/函数的内存使用信息。在过去的几年里,我正在开发云服务。当 php 7.0 发布时,我们注意到使用相同代码的内存使用量增加了大约 30%。
在 7.1 中,我们注意到每个请求的内存使用量通常会增加 10%。
当时我们面临速度和内存(还有很酷的新功能)之间的权衡,我们选择升级我们的环境。
但是现在,PHP 7.2 的速度几乎与 7.1 相同,而我们再次注意到,我们的代码在 7.2 上使用的内存增加了大约 10%。
我想知道如何测试我们的代码并查看每个方法在请求期间使用了多少内存。我尝试了一些类似 memory_get_usage() 或 Meminfo 的方法,但我正在寻找一种方法来为请求期间调用的所有方法/函数自动生成报告。手动检查 2000 多个方法/函数真的是不可能的。
【问题讨论】:
xdebug with cachegrind stats?还是 Blackfire.io? @LawrenceCherone:不在 2018 年/使用 php7 @symcbean 你是什么意思。你不认为 xdebug 是一个有效的选项? 如果在非生产环境中进行测试,这仅是一个有效的选项,当您只需要定性的性能指标时,您有一组现实的回归测试,您可以适当地翻译结果。使用最多内存的代码位不是问题 - 它是具有最高调用频率和内存使用产品的代码位,这是修复的优先事项。 我明白了,虽然你现在提到它很明显,但我在这里没有考虑生产就绪方面。 【参考方案1】:有一个maintained fork of xhprof 将在您的 php 版本上运行。注意,您不想在实时服务中运行不是专门为生产环境设计的分析器! (Xhprof-for-php7 旨在用于生产环境)
但要警惕您测量的指标;单个进程有一个相当的distorted view of its own footprint。
【讨论】:
以上是关于如何在生产环境中分析请求?的主要内容,如果未能解决你的问题,请参考以下文章
在虚拟机环境中分析 Java 应用程序(例如 vbox、vpc、vmware 等)