节点API服务器在并发调用上返回500错误

时间:2019-03-28 10:58:25

标签: node.js angular api concurrency camunda

首先使用前缀。我有一个Express节点充当API服务器,并有一个Angular(7.x)Web应用程序发出请求。

作为一项要求,我需要对相同的API进行约50-60次并发调用,但已实现了不同的请求主体,但是在尝试运行该应用程序时,很少有调用失败。错误如下(从错误信息中删除了linunx和url)。


config.service.ts:24 2019-03-28T09:30:00.000Z 2019-03-28T09:30:00.000Z
<---url--->:1 POST <---url> 500 (Internal Server Error)

core.js:1673 ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":500,"statusText":"Internal Server Error","url":"<--url--->","ok":false,"name":"HttpErrorResponse","message":"Http failure response for <--url--->: 500 Internal Server Error","error":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Error</title>\n</head>\n<body>\n<pre>TypeError: Converting circular structure to JSON<br> &nbsp; &nbsp;at JSON.stringify (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at stringify (<---linux-path--->/node_modules/express/lib/response.js:1119:12)<br> &nbsp; &nbsp;at ServerResponse.json (<---linux-path--->/node_modules/express/lib/response.js:260:14)<br> &nbsp; &nbsp;at errorHandler (v/helper/error-handler.js:20:28)<br> &nbsp; &nbsp;at Layer.handle_error (<---linux-path--->/node_modules/express/lib/router/layer.js:71:5)<br> &nbsp; &nbsp;at trim_prefix (<---linux-path--->/node_modules/express/lib/router/index.js:315:13)<br> &nbsp; &nbsp;at <---linux-path--->/node_modules/express/lib/router/index.js:284:7<br> &nbsp; &nbsp;at Function.process_params (<---linux-path--->/node_modules/express/lib/router/index.js:635:15</pre>\n</body>\n</html>\n"}
    at resolvePromise (zone.js:831)
    at resolvePromise (zone.js:788)
    at zone.js:892
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
    at Object.onInvokeTask (core.js:3811)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
    at drainMicroTaskQueue (zone.js:601)
    at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
    at invokeTask (zone.js:1744)
---

现在对于所有这些失败的请求,如果我从浏览器的“网络”选项卡中抓取并尝试在POSTMAN之类的工具上运行,则这些请求可以正常运行并返回所需的输出。

其他几点:

  1. API击中了camunda rest端点,而该端点在内部击中了postgres服务器。
  2. 尝试增加Posgres的限制以接受100个以上的呼叫,即使那没有用
  3. 对通过我的api在内部访问的camunda终结点API进行负载测试,它们可以正常工作,直到1000个并发调用为止。
  4. 使用loadtest npm程序包,对我们的api进行了负载测试,该api失败了,并发了3个以上的并发调用作为配置,失败的调用很少,少于3个则正常运行。 [访问权限对我来说,可能的问题区域]
  5. 作为节点配置的一部分,将 server.maxConnections增加到10000 ,这似乎也没有解决问题。
  6. 如果我在本地计算机上运行节点,则应用程序运行良好,但是在服务器上部署时请求失败。 [使用PM2在已部署节点群集的情况下完成部署]

如果数据延迟到来,这是可以预期的,但是请求不会失败。

任何意见/建议都会受到赞赏吗?

谢谢。


编辑-尝试了如下所述的其他方法,但是没有运气

我使前端API调用同步(早期50-60并发),并尝试在多个浏览器窗口中的多个Web应用程序实例上运行(我测试了6个同时实例),以测试负载并模拟用户同时访问。

仍然是相同的错误。 基本上,Node API服务器无法处理并发调用,使用1或2可以正常运行,但不能运行更多。有没有其他设置可以启用此功能??

任何线索都将不胜感激。谢谢。

0 个答案:

没有答案