我对serverless比较陌生,一直在本地运行我的函数,以便与jest单元测试一起使用。使用节点mysql,我通过调用mysql.createpool创建连接池,然后在需要查询时调用pool.query。我的工作假设pool.query实际上是调用pool.getconnection、connection.query和connection.release的快捷方式。从而使连接在处理完查询后再次可用。
我遇到的问题是,当我运行单元测试时,它们都是第一次运行,但是如果第二次运行,它们会由于“error:er\u con\u count\u error:too many connections”而失败。
当函数托管在aws lambda中时,我们不会遇到同样的问题。
有没有人经历过这样的事情,或者有没有人建议采取什么措施来缓解这一局部问题?
1条答案
按热度按时间zwghvu4y1#
你需要打电话
pool.end
关闭您端的所有池连接。否则,在mysql服务器关闭连接之前,连接是打开的。从节点mysql自述:
使用完池后,必须结束所有连接,否则node.js事件循环将保持活动状态,直到mysql服务器关闭连接。
这种情况在生产环境中很可能不会发生,因为aws lambda试图重用执行环境,所以实际上只有少数执行创建新池并打开新连接。