生产环境:在64位Linux上运行Apache 2.2和
单个工作机PHP进程预计始终在100毫秒以下运行单个请求。我最感兴趣的是收集那些需要超过100毫秒的进程的配置文件数据。最好的情况是,抽样分析器会在请求开始时被通知,如果处理请求的PHP进程在100毫秒后仍在运行,则开始以1毫秒间隔收集样本。这样,任何正常运行的进程都将在没有中断的情况下运行到结束,并且我仍将获取有问题的配置文件。 是否存在此类针对PHP的抽样分析器?意图是不使用插装分析器,因为开销太高,而且插装会弄乱统计数据(已经有了这种经历)。
我已经知道XHProf和Xdebug,但据我所知,两者都是插装分析器,并影响PHP程序的实际操作码。我非常希望有一些可以运行正常PHP操作码的东西。
我所知道的最接近的方法是使用HipHop运行PHP代码并使用C/C++代码的抽样分析器,但我还没有准备好将软件移植到HipHop。在那种情况下,配置文件结果只代表HipHop,而不代表mod_php。
mod_php
5.3的工作机群集前面有一个负载均衡器/HTTP反向代理。所有工作机器都运行相同的完全定制PHP代码并与单个后端PostgreSQL数据库通信。PHP代码经过优化,以花费CPU时间来交换数据库。已验证数据库机器仍有很多空闲时间。
我需要的内容:抽样分析器可以通过进程ID附加到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。