Heroku上的Node Express,服务时间加速

时间:2014-10-30 09:27:17

标签: node.js heroku express

我在Heroku上运行了一个Node应用程序,它使用node-express来提供Web内容并充当REST API端点。我看到的问题是偶尔服务时间会大幅增加。 (有时为20000 + ms,比如50ms。)这似乎发生在偶尔的静态文件加载上,以及提供与活动页面的心跳连接的非常简单的API调用。这些峰值发生在整个页面加载的很小比例(<1%),因此我自己无法复制它们。

例如:

heroku router - - at=info method=GET path="/static/js/thirdparty/jquery.min.js" host=somehost request_id=c1a88972-ba1b-4861-80c3-d8949fc1aa24 fwd="XXX.XXX.XXX.XXX" dyno=web.1 connect=64ms service=9560ms status=200 bytes=96677

或者,在API调用的情况下:

2014-10-25T01:33:39.360282+00:00 heroku router - - at=info method=POST path="/heartbeat/" host=somehost request_id=4b35cac3-b726-460d-a7fe-6cfc622b8b1c fwd="XXX.XXX.XXX.XXX" dyno=web.1 connect=0ms service=6962ms status=200 bytes=167

我对如何正确诊断这一点感到茫然。我目前正在运行一个dyno,所以我最好的猜测是 锁定了dyno。我还没有投入生产,即便如此,我的流量水平仍然很低 - 没有任何广泛证明在任何特定时间都能运行多个同步动力的理由。当我试图单步执行代码并在服务器端添加日志时,我从未见过任何在我身边运行缓慢的事情。我很欣赏我的代码中可能存在许多变量导致这种情况 - 我的心跳偶尔会出现一些延迟响应的呃声。但这并不能解释为什么我也会在静态服务的文件中看到它。

1 个答案:

答案 0 :(得分:1)

你在这里提到你正在使用node + express - 因为节点应用程序只在一个线程中运行,这里可能的罪魁祸首是你的应用程序正在做一些锁定CPU的事情

我知道这一点的原因是你的连接时间只有64毫秒(这是用户从负载均衡器到你的dyno的请求所花费的时间) - 但服务时间本身是9560毫秒 - 这意味着几乎所有的处理时间都发生在您的应用程序代码中。