PHP: проблема в использовании пула Pthread с памятью - PullRequest
0 голосов
/ 29 ноября 2018

У меня большая проблема 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 из памяти

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

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

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

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

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

Надеюсь, это поможет вам.

...