【问题标题】:Heroku app stops responding after a couple of requestsHeroku 应用程序在几个请求后停止响应
【发布时间】:2023-03-03 16:57:02
【问题描述】:

我有一个在单个 Dyno 和免费层 PostgreSQL 附加组件上运行的应用程序(到目前为止足以用于开发目的)。

每当我将我的应用程序部署到 Heroku 或使用工头模拟运行它时,一切都运行良好 - 直到它没有。

发出的请求并不过分复杂(基本的选择和插入),它们肯定会在几毫秒后响应。

我的测试脚本会调用我定义的路由(按顺序),但有时会在任意请求(包括工头和生产)上停止并超时。该应用程序没有崩溃并且仍在运行,但不再响应任何类型的请求(cURL、浏览器......)

这是日志:

2013-12-06T11:47:59.115033+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path=/users host=myapp.herokuapp.com fwd=IP dyno=web.1 connect=1ms service=30000ms status=503 bytes=0

当我重新启动应用程序并再次触发所述请求时,...它运行良好。好吧,直到它不再存在(8-12 个请求进入测试)。

我还测试了记录每个路由调用,发现超时的请求甚至没有触发第一行代码!因此,我被引导相信问题不在于我的反应需要很长时间......

这可能是什么原因?它是一些免费层限制吗?老实说,我不希望这样,因为那意味着我可以单枪匹马地按 F5 十几次“崩溃”服务器。

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    如果没有任何代码,这很难调试,但我猜你是 Node.js 套接字池的受害者。

    默认情况下,Node.js 中的连接来自套接字池。如果使用了所有套接字,则应用程序将等待套接字变为可用。您可能正在打开永远不会关闭的数据库连接(或者由于代码中的一些内存泄漏,对象永远不会被垃圾收集),从而耗尽了套接字池。然后解决方案是关闭那些未使用的连接(或修复内存泄漏)。

    这里有一些关于HTTP socket pool 的文档;你也可以阅读substack's rant

    【讨论】:

    • 你是我的救星。您的假设是绝对正确的,遗憾的是,将一段代码与问题一起发布并不容易,因为我什至不知道哪一部分。我解决了这个问题,实际上我使用的一个库有一个函数调用的外观,导致连接永远不会关闭!绝对很棒的小费。谢谢!
    • 我似乎遇到了同样的问题,您能否添加一些有关它是什么库以及您如何解决问题的详细信息?谢谢...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多