大家好,我描述一下我遇到的问题,
目的:
我想做一个爬虫,爬虫通过遍历userid来爬取,爬取过程分两步--两个请求,请求一刷新cookie,请求二得到内容。使用for循环是行不通的,因为请求是异步的,即便我把第二个请求写在回调中,也还是会在for中存在异步,而userid得数据很大,for是跑不了的,所以权衡之下,我用了递归。
问题一
但是使用递归会造成一个问题,就是使用的内存会慢慢增长直至占满nodejs所能使用的最大内存为止(先不讨论尾递归的东西)(当nodejs内存占满之后会发生什么?我只看到我的程序僵在那不动,也不报错,求解)
针对问题一
我想通过cluster模块来新建子进程,把爬虫放到子进程里面去完成,这样我每隔一段时间重启子进程去释放内存,但是发现,这种方法会带来一些问题。第一,子进程中的爬虫爬取的速度极其慢,性能极其低下。第二,子进程中的内存用尽,也就是问题一,父进程一点消息都得不到,无法通过error或者disconnect之类的去知道。其实很不明白为什么,子进程爬取处理会这么慢的原因。我看父进程和子进程都同属一个进程组。
ps:我在mac OSX 10.10.5系统上
学电子的,非科班,操作系统方面的充电在未来3-4个月的计划内
麻烦大家了,谢谢
首先,我觉得你的思路不对,for循环行不通那就找一个行得通的办法,建议看一下promise,async的用法。
其次,内存增长,你要搞清楚为什么增长,而不是定时去重启他,这样是治标不治本的。