CNode

请教一个请求慢的问题

问答
Bbillypon发布于10 年前最后回复10 年前18 回复5298 浏览0 收藏

用node+express开发了一个小程序,最终以production运行 但如果闲置的时间比较长(具体多久不清楚),后面第一次请求就会很慢,以后再请求就会很快 这个纯粹是计算请求返回的时间,不含静态资源 这是什么问题?如何解决?

查看回复

回复 (18)

1
151263#1·10 年前
引用 billypon@billypon 并且如果这个时候我立刻重启服务进程,请求还是相当的快

@billypon 你要排除是网络的问题, 换个网络试一下,比如说局域网, 然后 time也逐步的缩小范围, 对于诡异问题,逐步排除是唯一的方法

B
billypon#2·10 年前
引用 151263@billypon 用console.time("good"); console.timeEnd("good"); 看看是哪一步慢

@151263 试了一下,我在请求开始的地方设置time一下,然后请求返回之前timeEnd 再用curl模拟请求,结果就是先卡20s无显示,接着再显示time的时间,然后curl返回 之后再curl,就立即返回,相当的快

就是说,一旦闲置一段时间,给人的感觉就好像是重启了服务一样

B
billypon#4·10 年前
引用 151263@billypon 你要排除是网络的问题, 换个网络试一下,比如说局域网, 然后 time也逐步的缩小范围, 对于诡异问题,逐步排除是唯一的方法

@151263 我是直接在服务器上curl自己,所以不存在网络问题吧 time的话,我直接放在整个请求上,但返回的时间还是很短,连1秒都不到。 也就意味着,主要是卡在time之前

X
xinyu198736#5·10 年前

不说请求里的具体逻辑,都是耍流氓

B
billypon#7·10 年前
B
billypon#8·10 年前
引用 151263@billypon 那你就换一台服务器再次测试,换成别的电脑同样的代码再测试

@151263 结果来了,同样的代码,我后来放本机运行,同样是闲置很长时间 服务器是centos+systemd,本机是直接node app.js,都以production模式跑的 本机就很快,几乎秒回

J
JacksonTian#10·10 年前

是不是跟虚拟机有关系。闲置之后 资源较少,启动就较冷。

B
billypon#11·10 年前
引用 151263@billypon 那至少可以说明,跟nodejs的代码无关, 或者是操作系统,或者是网卡,或者是硬件部分

@151263 本机虽然快,但也是有一个停顿的,只是停顿时间很短,最多1s 而服务器上,停顿20s都有可能

B
billypon#12·10 年前
引用 JacksonTian是不是跟虚拟机有关系。闲置之后 资源较少,启动就较冷。

@JacksonTian 那请问有什么方法可以查吗?我感觉像是一些buffer被回收了,然后停顿的时间是为了重建buffer,不知道理解对不对

1
151263#13·10 年前
引用 JacksonTian是不是跟虚拟机有关系。闲置之后 资源较少,启动就较冷。

@JacksonTian 我的服务,天天都跑在虚拟机上, 各种各样的虚拟机,也没出现过这个问题

J
jiangliqin#14·10 年前

第一次请求需要建立tcp链接,握手-延迟确认,后面建立长链接后省去了这些

B
billypon#15·10 年前
引用 jiangliqin第一次请求需要建立tcp链接,握手 延迟确认,后面建立长链接后省去了这些

@jiangliqin 不,实际上和这个无关 关掉浏览器后,或者重新打开别的浏览器,甚至换一台电脑,换一个网络,此时请求不再缓慢 所以明显和tcp的三次握手无关

1
151263#16·10 年前

有可能是纳格算法的问题 要禁用掉纳格算法 server.on('connection',function(socket){ socket.setNoDelay(true); });

B
billypon#17·10 年前
引用 151263有可能是纳格算法的问题 要禁用掉纳格算法 server.on('connection',function(socket){ socket.setNoDelay(true); });

@151263 测试过了,这个方法也不行 停掉服务,然后修改代码,再启动服务,第一次请求的时候依然慢

1
151263#18·10 年前
参与回复
登录后即可参与回复。登录