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

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

我基本上是通过 Mocha 请求模块检查所有路由。

https://www.npmjs.com/package/request

我正在进行压力测试,方法是并排打开两个控制台窗口并同时运行它们。大多数时候测试都是成功的,但是当测试失败而没有超时错误时,瞬间就会到来,并且从 postman 那里我得到了停止响应的特定路线。

这种情况大约七次发生一次,我想知道我能做些什么来解决这个问题。

编辑: 增加到 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.]

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

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

最佳答案

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

关于mysql - 在压力下测试时,nodejs 运行时停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283323/

相关文章:

PHP 非对象错误

javascript - 我怎么能期望 Mocha 测试失败?

php - 根据项目类型自动计算输入日期

mysql - 如果新插入更改了该顺序,如何从数据库中检索一系列有序数据?

php - MySQL 表名带有重音符号。通过 PDO 更新时出现无效的 utf8 字符串

c++ - Windows XP 上的 Meteorite 安装错误 - 找不到 "c:\Microsoft.Cpp.Default.props"

javascript - 监听外部事件。 Bash 到 NodeJS 的桥梁

jquery - 我收到错误,因为 $ 不是函数

typescript - 如何使用 Mocha 测试 Typescript 中的类是否抽象?

javascript - 如何扩展 'should' 库