我使用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)……而当我们重新测试没有太多服务器负载可以看到
所以我想知道是不是在这里做错什么,还是有什么地方可以查看日志或发现什么地方出了什么问题?
答案 0 :(得分:3)
Puppeteer的内存崩溃经常发生。有些页面甚至可能消耗GB的内存,因此很难预测您可以并行运行多少个实例。
如果您运行的是我期望的多个Puppeteer浏览器实例,那么很容易用很少的标签打开内存。
一些使您的Puppeteer使用更加有效的内存方法:
为确保Puppeteer不会杀死其他进程,您可以在资源有限的docker容器中运行它。
我们使用此类https://github.com/apifytech/apify-js/blob/master/src/autoscaled_pool.js根据容器中的可用内存自动缩放Puppeteer任务(尽可能接近100%的CPU和100%的内存运行)。