3

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

我要做什么改变?

4

2 回答 2

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。

于 2015-06-04T13:49:46.733 回答
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 到这个 worker 的进程并LoopClient开始分析。它将侦听 10 次方法迭代consume并发送最后一个探测。之后它将停止分析。

于 2018-06-07T11:24:50.570 回答