我遇到同樣的問題,並沒有解決XDebug的。不幸的是我找不到XDebug的一種方法。就好像它不關心任何分支進程。
我解決了使用XHProf的來分析和Xhgui檢查日誌。 Xhprof是Facebook內部開發的一款優秀工具,然後在開源後發佈。 很酷的是,您可以決定何時開始分析以及何時停止。這使您能夠解決我們的問題。
所以首先讓我們安裝它!
sudo pecl install xhprof-beta
如果您使用的是基於debian的發行版,請確保您還安裝了graphviz。
sudo apt-get install graphviz
現在讓我們來看看代碼。
$children = [];
do {
if (count($children) < $maxConsumers) {
$pid = pcntl_fork();
$children[] = $pid;
if ($pid == -1) {
throw new \RuntimeException('Could not fork process');
} else if ($pid === 0) {
// we are the child
if ($verbose) {
$output->writeln(sprintf('Child here (PID = %s)', posix_getpid()));
}
if ($xhProf) {
// here we enable xhprof thus the profiling starts
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
// DO YOUR MAGIC HERE!
if ($xhProf) {
// and here we call the xhgui header file that will
// stop xhprof and write all the gathered data into
// mongo or into a dedicated file
require_once('/var/www/xhgui/external/header.php');
}
exit;
} else {
// we are the parent
if ($verbose) {
$output->writeln(sprintf('Parent here (PID = %s) spawned a new child (PID = %s)', posix_getpid(), $pid));
}
}
} else {
if ($verbose) {
$output->writeln(sprintf("Parent - spawned enough children, let's wait them..."));
}
$deadPID = pcntl_wait($status);
$children = array_diff($children, [$deadPID]);
} while (true);
// Waits for all remaining children
while (($pid = pcntl_waitpid(0, $status)) != -1) {
if ($verbose) {
$status = pcntl_wexitstatus($status);
$output->writeln(sprintf("Child (PID %d) terminated. Status is %s.", $pid, $status));
}
}
爲了檢查您的日誌,您還需要正確配置Xhgui。你可能也需要一個虛擬主機。
對於所有所需的配置和以供參考: