在 rails rake 中写爬虫任务,需要长时间运行。发现每执行一段时候后终端直接显示“已杀死”,然后就没有然后了。stackoverflow 上提到的貌似是内存占用过多的问题。之后重新执行该任务,用 top 监控内存占用情况,确实存在内存占用稳步上身的问题,执行了 40 分钟,内存占用达到 27%。
想了解下是不是因为我的程序写的有问题导致内存占用不断提升?由于程序太长无法贴到这里,是不是在 ruby 中有哪些坑会导致内存不释放?
不一定是程序的问题,也有可能是服务器内存太小。加点内存试试。程序的话就主要看是不是创建了大量的对象,然后长时间保持对对象的引用使它们无法被垃圾回收。
#1 楼 @tylerlong 已经有 8G 的内存了... ruby 有没有哪些情况是会导致内存占用过多且不释放的?
#2 楼 @neversion
@tylerlong 所言极是,你这个很有可能是赋了过多的全局对象,无法释放。可试试这里的办法查之:
http://ruby-china.org/topics/9737
@tylerlong @lyfi2003 多谢回复,我试下。
我之前爬数据是放到 sidekiq 里,效率高很多