Я получаю ошибки (слишком много соединений), когда я cURL от родителя к нескольким детям и выполняю запросы mysqli
Я пытался использовать постоянные соединения только с родителем, а также с родителями и детьми. Когда я проверяю от родителя до 25 детей в качестве теста, примерно 20 будет обрабатываться, а затем я получаю ошибку «слишком много соединений». Журналы подтверждают, что не все дочерние процессы выполняются.
Вот код для родителя:
<!-- parent start -->
$link = mysqli_connect('p:host', 'user', 'password', 'database');
$sql = mysqli_query($link, "SELECT * FROM t1");
$rowcount = mysqli_num_rows($sql);
if ($rowcount > '0') {
$mh = curl_multi_init();
$active = null;
}
while ($row = mysqli_fetch_assoc($sql)) {
$sql2 = mysqli_query($link, "SELECT id FROM t2 WHERE field1 = 'Waiting'");
$row2 = mysqli_fetch_assoc($sql2);
extract($row2);
// spawn child process
$ch = '$ch' . $id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'loadtest.child.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, 'loadtest.parent.php');
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$curl_data = 'jid=' . $id;
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curl_data);
curl_multi_add_handle($mh,$ch);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($active > 0);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
?>
<!-- parent end -->
И ребенок
<!-- child start -->
$link = mysqli_connect('p:host', 'user', 'password', 'database');
$sql = mysqli_query($link, "SELECT * FROM t3 WHERE field1 ='" . $jid . "' LIMIT 1");
$row = mysqli_fetch_assoc($sql);
extract($row);
$sql2 = mysqli_query($link, "SELECT * FROM t4 WHERE field1='" . $jid . "' LIMIT 1");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'loadtest.script.php);
$result = curl_exec($ch);
curl_close($ch);
$sql_update = mysqli_query($link, "UPDATE t1 SET status = 'Processed' WHERE field1 = '$jid'");
<!-- child end -->
Я удалил некоторый код из родительского и дочернего, который записывает в журналы, и ссылка в child на loadtest.script.php относится к заполнителю, который не делает ничего, кроме записи одной строки в текстовый файл.
Прямо сейчас я нахожусь на общем сервере и имею максимум 240 соединений, которые я не могу изменить. Я буду идти на выделенный сервер в ближайшее время.
Любые предложения о том, как заставить детей работать на том же постоянном соединении и избежать ошибки mysql «слишком много соединений»?
Также любые другие предложения будут оценены.
Благодарю.
Задача ещё не решена.
Других решений пока нет …