新手问题 rake 任务运行一段时间后被 killed

neversion · 2014年05月04日 · 最后由 miclle 回复于 2014年05月06日 · 2592 次阅读

在 rails rake 中写爬虫任务,需要长时间运行。发现每执行一段时候后终端直接显示“已杀死”,然后就没有然后了。stackoverflow 上提到的貌似是内存占用过多的问题。之后重新执行该任务,用 top 监控内存占用情况,确实存在内存占用稳步上身的问题,执行了 40 分钟,内存占用达到 27%。

想了解下是不是因为我的程序写的有问题导致内存占用不断提升?由于程序太长无法贴到这里,是不是在 ruby 中有哪些坑会导致内存不释放?

不一定是程序的问题,也有可能是服务器内存太小。加点内存试试。程序的话就主要看是不是创建了大量的对象,然后长时间保持对对象的引用使它们无法被垃圾回收。

#1 楼 @tylerlong 已经有 8G 的内存了... ruby 有没有哪些情况是会导致内存占用过多且不释放的?

#2 楼 @neversion

@tylerlong 所言极是,你这个很有可能是赋了过多的全局对象,无法释放。可试试这里的办法查之:

http://ruby-china.org/topics/9737

@tylerlong @lyfi2003 多谢回复,我试下。

我之前爬数据是放到 sidekiq 里,效率高很多

需要 登录 后方可回复, 如果你还没有账号请 注册新账号