PHP: проблема в использовании Pthread Pool с памятью

У меня большая проблема
16 Гб оперативной памяти моего сервера

$scan_pol = new \Pool(2000);
$range = ip_range($start_range, $last_range);
foreach ($range as $ip_num => $ip_value) {
$scan_pol->submit(new scan($ip_value));
}

Я отправляю в $ scan_pol 16581375 Задачу

unset($range);
while ($scan_pol->collect()); // here i want to edit
$scan_pol->shutdown();

и в то время как я вижу производительность в диспетчере задач, использование памяти чрезмерно увеличивается до полного и выскакивает эту ошибку
снимок

затем остановите CLI
Я хочу при сборе задач удалить задачу из памяти, чтобы сбалансировать использование памяти

ПРИМЕЧАНИЕ. Я изменил пул потоков от 2000 до 1000
и пытался уменьшить $range Массив, чтобы уменьшить нагрузку на оперативную память, но та же проблема

потому что собирать после завершения задачи не unset это из памяти

Любая помощь, пожалуйста

Благодарю вас

0

Решение

Вы можете реализовать свою функцию ip_range как генератор вместо итератора, что сэкономит вам много памяти. Смотри сюда:http://php.net/manual/en/language.generators.overview.php

Его можно использовать непосредственно в цикле foreach без присвоения значения переменной.

Затем, пожалуйста, установите размер вашего пула в соответствии с объемом вашей памяти.

Я надеюсь, что это поможет вам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]