木偶/铬由于缺乏RAM而导致服务器崩溃

时间:2018-07-11 16:01:44

标签: javascript node.js puppeteer

我使用nodejs / puppeteer将我的用户登录到远程网站...这是它的工作原理

客户端通过socket.io连接到nodejs服务器,客户端将<engine name="ios" spec="^4.5.4"/> 发送到nodejs服务器以启动操纵up,而运行伪操纵者的节点调用start_tunnel

run(socket , data.token );

这是 io.on('connection' , function(socket){ socket.on('start_tunnel' , function (data) { fullfillCaptcha[socket.id] = null ; set_stat(socket.id , 1 ); run(socket , data.token ); }) socket.on('get_captcha_from_client' , function (data) { fullfillCaptcha[socket.id](data); }) }); var fullfillCaptcha = {}; var pay_stats = {} ; function captchaPromise(id){ return new Promise(resolve => fullfillCaptcha[id] = resolve); } 函数,用于操纵伪娘....我已经注释了代码,因此其易于阅读...基本上,它打开了一个包含带有验证码的表单的网页,并从验证码中截取了屏幕截图图片并将其发送给客户端,从客户端接收键入的验证码,将其放入输入中并提交表单

run

这是问题所在,由于缺少RAM及其使用ram的所有伪人,我们遭受了很多服务器的困扰……我们有一个不错的vps(4G RAM,2 CPU)……而当我们重新测试没有太多服务器负载可以看到

所以我想知道是不是在这里做错什么,还是有什么地方可以查看日志或发现什么地方出了什么问题?

1 个答案:

答案 0 :(得分:3)

Puppeteer的内存崩溃经常发生。有些页面甚至可能消耗GB的内存,因此很难预测您可以并行运行多少个实例。

如果您运行的是我期望的多个Puppeteer浏览器实例,那么很容易用很少的标签打开内存。

一些使您的Puppeteer使用更加有效的内存方法:

为确保Puppeteer不会杀死其他进程,您可以在资源有限的docker容器中运行它。

我们使用此类https://github.com/apifytech/apify-js/blob/master/src/autoscaled_pool.js根据容器中的可用内存自动缩放Puppeteer任务(尽可能接近100%的CPU和100%的内存运行)。