node.js应用程序在一段时间后开始超时



使用javascript/express/node开发web应用程序。在我的本地机器和Heroku上,运行一小段时间(约5分钟)后,我必须重新启动服务器,否则它永远不会响应请求。我不知道是什么原因造成的。以前有人处理过这样的事情吗?

2014-02-10T01:25:29.935130+00:00 app[web.1]: GET / 304 281ms
2014-02-10T01:25:29.936342+00:00 heroku[router]: at=info method=GET path=/ host=wwwcom request_id=8d2cd623-c379-4e6a-8b30-1021dd2f5d18 fwd="" dyno=web.1 connect=2ms      service=284ms status=304 bytes=0
2014-02-10T01:25:30.096768+00:00 heroku[router]: at=info method=GET path=/css/style.css host=wwwcom request_id=953f1c0c-65ce-4ac7-bfc5-04d5bec2791a fwd="" dyno=web.1 connect=2ms service=7ms status=304 bytes=0
2014-02-10T01:24:10.997307+00:00 heroku[router]: at=info method=GET path=/img/money.jpg host=wwwcom request_id=b1eb7f92-98ae-466d-8e03-a7539215936a fwd="" dyno=web.1 connect=2ms service=2ms status=304 bytes=0
2014-02-10T01:25:30.171105+00:00 heroku[router]: at=info method=GET path=/img/money.jpg host=wwwcom request_id=fd9244d0-22eb-4e28-ac81-b820bcab753b fwd="" dyno=web.1 connect=16ms service=4ms status=304 bytes=0
2014-02-10T01:27:58.989371+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/ host=wwwcom request_id=ddcb47a6-b250-49ea-8ba8-9c9da4c41c91 fwd="" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0
2014-02-10T01:27:58.997153+00:00 app[web.1]: GET / 200 30003ms

我认为从这里开始会很好,尤其是调试请求超时部分可能会有所帮助:

调试请求超时

请求超时的一个原因是代码中的无限循环。在本地进行测试(也许可以使用pgbackups删除的生产数据库副本),看看是否可以复制问题并修复错误。另一种可能性是,您正试图在web流程中执行某种长期运行的任务,例如:

  • 发送电子邮件
  • 访问远程API(发布到Twitter、查询Flickr等)
  • Web抓取/爬网
  • 渲染图像或PDF
  • 繁重的计算(计算斐波那契序列等)
  • 数据库使用量大(查询速度慢或数量多,N+1个查询)

如果是这样,您应该将这项繁重的工作转移到后台作业中,该作业可以从您的web请求异步运行。有关详细信息,请参阅后台工作人员。