如何使用Blackfire配置PHP shell脚本应用程序或工作程序

时间:2015-06-04 13:49:03

标签: php worker beanstalkd blackfire

我注意到,当我有一个无尽的工作者时,我无法分析PHP shell脚本。因为当它被杀死时它不会发送探测器。

我应该做些什么改变?

2 个答案:

答案 0 :(得分:3)

当您尝试描述正在运行无限循环的工作程序时。在这种情况下,您必须手动编辑代码以删除无限循环或检测代码以手动调用探针的close()方法(https://blackfire.io/doc/manual-instrumentation)。

这是因为只有在调用close()方法时才会将数据发送到代理程序(除非你将其杀死,否则会在程序结束时自动调用它)。

您可以使用Blackfire探针附带的BlackfireProbe类手动检测一些代码:

// Get the probe main instance
$probe = BlackfireProbe::getMainInstance();
// start profiling the code
$probe->enable();

// Calling close() instead of disable() stops the profiling and forces the  collected data to be sent to Blackfire:

// stop the profiling
// send the result to Blackfire
$probe->close();

与自动检测一样,仅当代码通过Companion或blackfire CLI实用程序运行时,分析才会处于活动状态。如果没有,则所有呼叫都转换为noops。

答案 1 :(得分:0)

我不知道,也许在2015年以后页面不存在,但现在你可以通过以下方式进行分析:https://blackfire.io/docs/24-days/17-php-sdk

$blackfire = new LoopClient(new Client(), 10);
$blackfire->setSignal(SIGUSR1);
$blackfire->attachReference(7);
$blackfire->promoteReferenceSignal(SIGUSR2);

for (;;) {
    $blackfire->startLoop($profileConfig);

    consume();

    $blackfire->endLoop();

    usleep(400000);
}

现在您可以向此工作人员发送信号SIGUSR1,LoopClient将开始分析。它将监听方法consume的10次迭代并发送最后一次探测。之后,它将停止分析。