PHP:在带有内存的Pthread池中使用问题

时间:2018-11-29 03:34:42

标签: php memory pthreads threadpool

我有大问题 我服务器的16Gb RAM

$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();

,当我在任务管理器中看到“性能”时,内存使用率过度增加至已满并弹出此错误 snapshot

然后停止CLI
我想在收集任务时从内存中删除任务以平衡内存使用量

注意:我将Pool Threads 2000更改为1000
并尝试减少$range数组以减少RAM上的压力,但存在相同的问题

因为终止任务后收集不要unset从内存中收集

请帮助

谢谢

1 个答案:

答案 0 :(得分:0)

您可以将ip_range函数实现为生成器而不是迭代器,这将节省大量内存开销。看这里:http://php.net/manual/en/language.generators.overview.php

它可以直接在foreach循环中使用,而无需为变量分配值。

然后,请根据您的内存大小设置池的大小。

我希望这会对您有所帮助。