У меня большая проблема
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
это из памяти
Любая помощь, пожалуйста
Благодарю вас
Вы можете реализовать свою функцию ip_range как генератор вместо итератора, что сэкономит вам много памяти. Смотри сюда:http://php.net/manual/en/language.generators.overview.php
Его можно использовать непосредственно в цикле foreach без присвоения значения переменной.
Затем, пожалуйста, установите размер вашего пула в соответствии с объемом вашей памяти.
Я надеюсь, что это поможет вам.
Других решений пока нет …