無限のワーカーがあると、PHP シェル スクリプトをプロファイリングできないことに気付きました。殺されるとプローブを送信しないためです。
どのような変更を行えばよいですか?
無限のワーカーがあると、PHP シェル スクリプトをプロファイリングできないことに気付きました。殺されるとプローブを送信しないためです。
どのような変更を行えばよいですか?
無限ループを実行しているワーカーをプロファイリングしようとしているとき。この場合、コードを手動で編集して無限ループを削除するか、プローブの 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 年には次のページは存在しませんでしたが、現在は次の方法でプロファイリングを行うことができます: 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
プロファイリングを開始できます。メソッドの 10 回の反復をリッスンconsume
し、最後のプローブを送信します。その後、プロファイリングを停止します。