Laravel 5.1 队列,使用内存不断增长的问题。
使用的是laravel 5.1,队列放在redis里
使用supervisor管理,php artisan queue:work connection --daemon --sleep=3 --tries=3。基本就是按照文档做的。
现在的问题是,队列一直有很多 job 在处理,服务器上这些work占用的内存一直在增长。
我的理解是,这是一个php的守护进程,php 并不会主动的释放内存,不断的处理任务,所以内存一直在增加。所以需要手动unset掉所有的变量,或者调用 gc_collect_cycles 强制处理垃圾,或者定时重启所有 work 让进程结束,让php释放内存?
<?php
class Foo
{
public $var = '3.1415962654';
}
$baseMemory = memory_get_usage();
$startTime = microtime();
for ( $i = 0; $i <= 100000; $i++ )
{
$a = new Foo;
$a->self = $a;
if ( $i % 500 === 0 )
{
echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n";
}
# 1.手动unset
//unset($a->self);
//unset($a);
# 2.最后调用gc_collect_cycles
//gc_collect_cycles();
}
写了个脚本,1,2两种方法都有用,
我的理解对吗?大家是怎么处理这个问题的?
推荐文章: