我基本上通过请求模块使用mocha检查所有路由。
https://www.npmjs.com/package/request
我正在进行压力测试,通过并排打开两个控制台窗口并同时运行它们。大多数时间测试都是成功的,但是当测试失败而没有超时错误时会立即出现,而邮递员我会停止响应此特定路径。
它在大约7次发生一次,我想知道我能做些什么才能解决这个问题。修改 增加到4个控制台窗口同时运行测试,它们运行了几次,但随后开始超时。
app.get,app.post等路线上甚至没有控制台输出。
有什么建议吗?
修改的
根据测试中的建议捕获了一些请求错误。
Uncaught AssertionError: { [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' } == null
上述错误的相应代码是
request({url: endpoint + "/SignIn?emailAddress=" + emailAddress + "&password=" + password}, function (error, response, body) {
assert.equal(error, null);
编辑2 使用控制台语句深入挖掘并注意到未调用mysql连接回调。附上截图并注意到一些连接限制,是不是因为这个?我虽然使用了连接池。
日志说迫使线程关闭。
可能答案:
这个帖子帮助解决了这个问题。 https://github.com/felixge/node-mysql/issues/405
我设置waitForConnections: false
然后开始看错误 - >
[Error: No connections available.]
所以在我看来,系统正在等待连接但是测试运行器没有等待并最终出现超时错误。
似乎对最大连接数有一些限制,虽然我在每次查询后调用连接时发布,但不确定它在生产系统上是如何工作的?我们有限制吗?
答案 0 :(得分:0)
你的tcp连接已经用完了。您需要在系统和应用程序级别进行一些更改,以使其处理更多负载。 1.尽可能将连接设置更改为keepAlive。 2.在unix上,你有ulimit,即任何进程在任何时刻都可以拥有的最大文件句柄数。请记住,在unix中,每个套接字也是一个文件。 3.根据数据库服务器或其他Web服务器的响应时间管理超时设置。 如果您有多层架构,则必须在每个处理请求级别进行类似的更改。