我有一个应用程序在单个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来单独“崩溃”服务器。
答案 0 :(得分:2)
如果没有任何代码,这很难调试,但我猜你是Node.js套接字池的受害者。
默认情况下,Node.js中的连接来自套接字池。如果使用了所有套接字,则应用程序将等待套接字变为可用。您可能正在打开从未关闭的数据库连接(或者由于代码中的某些内存泄漏而导致对象永远不会被垃圾回收),从而耗尽了套接字池。然后解决方案是关闭那些未使用的连接(或修复内存泄漏)。
以下是有关HTTP socket pool的一些文档;你也可以阅读substack's rant。