0

我基本上是通过带有 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.]

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

似乎对最大连接数也有一些限制,尽管我在每次查询后都调用了连接释放,但不确定这在生产系统上是如何工作的?我们有限制吗?

4

1 回答 1

0

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

于 2015-05-17T06:53:27.883 回答