写了个处理 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 扩展问题?
爆了设定的占用内存限制会自动结束进程,设置无限内存也有点实际,这问题有点头疼
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.