Heroku的应用程序停止响应几个请求后

我有一个应用程序运行在一个单一的Dyno和自由层的PostgreSQL附加(到目前为止足够的开发目的)。

每当我将应用程序部署到Heroku上,或者模拟与工头一起运行时,所有的工作都非常出色 – 直到它没有。

所做的要求不是太复杂(基本的select和插入),并且在几毫秒之后肯定会作出回应。

我的testing脚本调用我定义的路线(按顺序),但有时只是在任意请求(工头和生产)上停止和超时。 该应用程序不会崩溃,仍在运行,但不再响应任何types的请求(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请求testing)。

我还testing了每个路由调用的日志logging,发现超时请求甚至不会触发代码的第一行! 因此,我被引导认为,这个问题并不在于我的反应持续很长时间。

这可能是什么原因? 它是一些免费的限制? 我真的希望不会,因为那意味着我可以单击“撞击”服务器,打F5十几次。

没有任何代码就很难debugging,但我猜你是Node.js套接字池的受害者。

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

这里是一些关于HTTP套接字池的文档。 你也可以阅读substack的咆哮 。