nodejs运行时在压力下测试时停止响应

时间:2015-05-17 04:20:14

标签: mysql node.js mocha stress-testing node-request

我基本上通过请求模块使用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连接回调。附上截图并注意到一些连接限制,是不是因为这个?我虽然使用了连接池。

enter image description here

日志说迫使线程关闭。

enter image description here

可能答案:

这个帖子帮助解决了这个问题。 https://github.com/felixge/node-mysql/issues/405

我设置waitForConnections: false然后开始看错误 - >

[Error: No connections available.]

所以在我看来,系统正在等待连接但是测试运行器没有等待并最终出现超时错误。

似乎对最大连接数有一些限制,虽然我在每次查询后调用连接时发布,但不确定它在生产系统上是如何工作的?我们有限制吗?

1 个答案:

答案 0 :(得分:0)

你的tcp连接已经用完了。您需要在系统和应用程序级别进行一些更改,以使其处理更多负载。 1.尽可能将连接设置更改为keepAlive。 2.在unix上,你有ulimit,即任何进程在任何时刻都可以拥有的最大文件句柄数。请记住,在unix中,每个套接字也是一个文件。 3.根据数据库服务器或其他Web服务器的响应时间管理超时设置。 如果您有多层架构,则必须在每个处理请求级别进行类似的更改。