2014-10-30 72 views
0

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

例如:

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

我在为如何正确地诊断这种损失。我目前正在运行单个测功机,所以我最好的猜测是锁定了测功机。我还没有投入生产,甚至期望我的交通水平相当低 - 没有任何广泛证明在任何给定时间运行多个同步动力线的理由。当我试图通过我的代码并在服务器端添加日志时,我从来没有看到任何运行缓慢的事情。我明白,在我的代码中可能有一些变量会导致这种情况 - 在我的心跳中出现偶尔的呃逆,这会延迟响应。但是这并不能解释为什么我也会在静态提供的文件中看到它。

回答

1

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

我知道这个的原因是你的连接时间在这里只有64ms(这是用户请求从负载平衡器到你的动态测试的时间) - 但服务时间本身是9560ms - 这意味着几乎所有的处理时间都在您的应用程序代码中进行。

相关问题