我有用php和symfony2框架编写的rabbitmqconsumers,我正试图用xhprof了解系统的内部工作原理和问题。问题是它没有将任何内容保存到mongodb中。Mongo完全是空的。
我已经尝试在php.ini、applications.htaccess文件和apaches虚拟主机中设置auto_prepend_file(它添加了必要的头文件)。
我将探查器设置为探查每个请求,它探查其他一切都很好,除了后台运行的rabbitmqconsumers。但为什么不呢?
例如,我调用了phpinfo.php文件,它对它进行了完美的描述,但对消费者没有,没有。
Xhprof不会在脚本退出时强制保存配置文件数据。但是当你指示他这样做时。许多设置包括https://github.com/patrickallaert/xhprof#profile-您的页面,使用register_shutdown_function()
,它在脚本结束时执行。
但是,您可以将xhprof_enable()
/xhprof_disable()
放在要评测的代码周围。它在循环中也是完全有效的,例如:
<?php
while (true) {
// Fetch a message from the queue
// Start profiling
xhprof_enable();
// [treatment of your message]
// End profiling and dump the result
file_put_contents("/tmp/" . uniqid() . ".your_app.xhprof", serialize(xhprof_disable()));
}
Xhprof在脚本存在时对数据进行配置,这对rabbitmq-使用者来说是不可能的,因为它们是在后台运行的进程。
因此:一个解决方案是将头文件中适当的开始和退出代码添加到正在运行的脚本中,但这对我来说太麻烦了
我最终使用了PHP自己的XDebug和可视化工具:Webgrind。