gpt4 book ai didi

PHP:如何在生产中运行采样分析器?

转载 作者:可可西里 更新时间:2023-10-31 23:42:30 26 4
gpt4 key购买 nike

生产环境:在 64 位 Linux 上运行 Apache 2.2 和 mod_php 5.3 的工作机器集群前面的负载平衡器/HTTP 反向代理。所有工作机器都运行相同的完全自定义的 PHP 代码,并与单个后端 PostgreSQL 数据库通信。 PHP 代码经过优化,可以将 CPU 用于与数据库通信。已验证数据库机器仍有大量空闲。

我正在寻找的采样分析器,它可以通过 PID 附加到 PHP 进程并定期停止进程(例如使用 SIGSTOP),通过内存收集 PHP 堆栈检查并继续该过程(例如使用 SIGCONT)。停止周期应该是可调的,但我认为停止间隔应该在 1-10 毫秒左右。

单个工作机器 PHP 进程应始终在不到 100 毫秒的时间内运行单个请求。我最感兴趣的是为那些耗时超过 100 毫秒的进程收集配置文件数据。最好的情况是一个采样分析器,它会在请求开始时收到通知,如果处理请求的 PHP 进程在 100 毫秒后仍在运行,则开始以 1 毫秒的间隔收集样本。这样,任何正常运行的进程都可以不间断地运行到最后,而且我仍会获得问题案例的配置文件。

是否存在这种用于 PHP 的采样分析器? 目的是不使用检测分析器,因为开销太高并且检测会扰乱统计数据(在那里,做过)。 p>

我已经知道 XHProf 和 Xdebug,但据我所知,它们都是检测分析器并影响 PHP 程序的实际操作码。我非常喜欢运行普通 PHP 操作码的东西。

我知道最接近的方法是使用 HipHop 运行 PHP 代码并对 C/C++ 代码使用采样分析器,但我还没有准备好将软件移植到 HipHop。在那种情况下,分析结果将仅代表 HipHop,而不代表 mod_php。

最佳答案

虽然 XHProf 在启用时确实增加了请求的开销(通过调用的函数,而不仅仅是启用扩展),但它会根据您使用的标志而有所不同。我最近对此进行了测量,发现只有 XHPROF_FLAGS_MEMORY 是最小开销的最佳选择:

http://rpubs.com/msonnabaum/xhprof_overhead

我只是对少量请求运行 XHProf,如下所示:

<?php
function xhprof_enabled() {
if (mt_rand(1, 300) == 1) {
xhprof_enable(XHPROF_FLAGS_MEMORY);
}
}

但与 xdebug 不同的是,仅仅启用扩展似乎根本不会增加任何开销。

关于PHP:如何在生产中运行采样分析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com