生产环境:mod_php
在 64 位 Linux 上运行 Apache 2.2 和 5.3 的工作机器集群前面的负载平衡器/HTTP 反向代理。所有工作机器都运行相同的完全自定义的 PHP 代码,并与单个后端 PostgreSQL 数据库通信。PHP 代码经过优化,可以在与数据库对话时花费 CPU。已验证数据库机器仍有大量空闲。
我正在寻找:采样分析器,它可以通过 PID 附加到 PHP 进程并定期停止进程(例如使用SIGSTOP
),通过内存检查收集 PHP 堆栈并继续进程(例如使用SIGCONT
)。停止周期应该是可调的,但我认为停止间隔应该在 1-10 毫秒左右。
单个工作机器 PHP 进程预计将始终在不到 100 毫秒的时间内运行单个请求。我最感兴趣的是为那些花费超过 100 毫秒的进程收集配置文件数据。最好的情况是在请求开始时通知采样分析器,如果处理请求的 PHP 进程在 100 毫秒后仍在运行,则开始以 1 毫秒的间隔收集样本。这样,任何正常运行的进程都将在没有中断的情况下运行到最后,并且我仍然可以获得有问题的情况的配置文件。
是否存在这种用于 PHP 的采样分析器?目的是不使用检测分析器,因为开销太高并且检测会混淆统计信息(在那里,完成了)。
我已经知道 XHProf 和 Xdebug,但据我所知,它们都在检测分析器并影响 PHP 程序的实际操作码。我非常喜欢运行普通 PHP 操作码的东西。
我所知道的最接近的工作是使用 HipHop 运行 PHP 代码,并对 C/C++ 代码使用采样分析器,但我还没有准备好将软件移植到 HipHop。在这种情况下,分析结果将仅代表 HipHop,而不是 mod_php。