[问题][暂未解决] 并发场景下 "mysql: too many connections" 原因

用nodejs写爬虫的时候,使用了类似这样的函数

let conn = null;

try{

  conn = await pool.getConnection();

  await conn.begin()

  let rst = await .conn.query('xxxx',params);

  // 处理rst

  ...

  await conn.commit()

}catch(e){

  if(conn) await conn.rollback(); 

}finally{

  if(conn) await conn.release();

}

乍一看没有问题,执行爬虫之后,我会调用这段代码把分析过的数据存在数据库里。

但是由于我是使用非阻塞的形式进行抓取数据的,如下

emitter.on('url_found', async (url)=>{

  // 请求url地址,获取返回的response body

  let res = await request(url);

  // 处理res

  ...

  // 后面调用上面的第一段代码

})

这里会发生一件事,就是可能同时触发了1000个这样的事件,然后一起获取链接,但是还没有释放,然后报错: too many connections

猜你喜欢

转载自www.cnblogs.com/kazetotori/p/9333465.html
今日推荐