5

生产环境: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。

4

2 回答 2

1

尽管 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 不同的是,简单地启用扩展似乎根本不会增加任何开销。

于 2012-10-18T05:17:37.883 回答
-1

我不会在生产环境中运行任何分析器工具。测试服务器用于运行分析器和负载测试。

于 2012-09-19T02:04:55.877 回答