写了个处理 redis 阻塞队列的脚本任务常驻在系统里面,随着处理的任务数越多,进程占用内存慢慢增大。脚本大致内容如下:
<?php
$redis = new Redis();
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1)
//连接 redis 省略
while(1){
$data = $redis->brpop('queueName',60);
if(!empty($data)){
$obj = new someObj();
$obj->handleSomething($data);
unset($obj);
}else{
sleep(10);
}
}
具体查看进程占用内存,我是参考这些参数:
ps auxf命令的 RSS 列,以及 top命令的 RES 列
为什么会这样,按我目前理解,每处理一个任务应该都释放部分内存啊,至少看不到会导致占用内存累加的部分,非常疑惑。请教一下各位 dalao 们。是我用的框架有问题?还是 php 的 redis 扩展问题?
爆了设定的占用内存限制会自动结束进程,设置无限内存也有点实际,这问题有点头疼
之前脚本也是内存爆了, 强制 gc 大数组 先赋值 null,在 unset 也会有增长, 后来改成处理完某批次任务,判断运行时间超过定长 就主动退出,然后靠守护进程拉起..