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两种方法都有用,
我的理解对吗?大家是怎么处理这个问题的?
--daemon
选项强制队列服务器持续处理任务,而不需要重新启动整个框架。应该是你有一些资源没注意释放掉,文档里面有这段:http://learnku.com/docs/laravel/5.1/queues#在后台服务的队列侦听器中开发时所要考量的事项
daemon 不重启框架
demon守护进程,不重启框架,所以需要手动unset掉变量,释放内存。
那么其实所有的变量都是需要释放的啊,不然内存涨上来只是时间的问题?