Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js应用程序有定期的慢度和/或超时(不接受传入的请求)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在试图捕捉这个bug很长时间。我的想法,我正在寻找新的建议。这个问题是杀死我的生产服务器的稳定性,真的需要尽快解决

总而言之,基本思想是我的节点服务器有时间歇性地减慢,有时导致网关超时。就像我可以从我的日志,告诉我的东西是阻塞节点线程(意味着传入的请求不被接受),但我不能为我的生活弄清楚什么。

问题的严重程度。有时应该是< 100ms请求需要〜10秒完成;有时它们甚至根本不被节点服务器接受。简而言之,就像一些随机任务正在工作并阻塞节点线程一段时间,从而减慢(甚至阻塞)进入的请求;我可以肯定的一件事是,需要修复症状是一个“网关超时”。 这个问题来了,没有警告。我无法将其与cpu使用率,RAM使用率,正常运行时间或任何其他相关统计数据相关联。我已经看到服务器处理大负载罚款,然后有一个负载的这个错误,所以它甚至不显示负载相关。在大约凌晨1点(太平洋标准时间)附近看到错误是不寻常的,这是当天最小的加载时间!重新启动节点应用程序似乎可能使问题消失了一段时间,但这真的不告诉我很多。我想知道如果it might be a bug in node.js …不是很安慰,虑到它杀了我的生产服务器。

>我做的第一件事是确保我已经将node.js升级到最新版本(0.8.12),以及所有我的模块(here they are)。当然,我也有很多错误捕手到位。我不会做任何时髦的打印出来到控制台或写入很多文件
>首先,I thought it was outbound HTTP requests blocking the incoming socket,because the express middleware was not even picking up the inbound request,but I gave up the theory because it looks like the node thread itself became busy
>接下来,我浏览了所有我的代码与JSHint和固定字面上每一个警告,包括一些偶然的全局(忘记写“var”),但这没有帮助
>之后,我认为我可能已经耗尽了记忆。但是,我的堆快照通过nodetime现在看起来不错(描述如下)。
> Still thinking that memory might be an issue,I took a look at garbage collection.我启用了–nouse-idle-notification标志,并对NULL对象做了一些更多的代码优化,当不需要它们。
>仍然相信内存是个问题,我添加了–expose-gc标志并执行了gc();命令每分钟。这没有改变任何东西,除了偶尔使请求也许有点慢。
>在一个绝望的尝试,我设置“集群”模块使用2工人,并自动每30分钟重新启动。仍然,没有运气。
>我将ulimit增加到超过10,000,并保持打开的文件。似乎有& 300打开文件(或套接字)每个node.js应用程序,并增加ulimit因此没有影响。

我已经记录我的服务器与nodetime,这里是它的jist:

>在Amazon Cloud上运行的CentOS 5.2(m1.large实例)
>任何时候都有大于5000 MB的可用内存
>始终小于150 MB堆大小
> cpu使用率始终小于60%

我也检查了我的MongoDB服务器,其中<5%的cpu使用率,没有请求> 100ms完成,所以我高度怀疑有瓶颈。

我使用Q-promises(see code sample)包装(几乎)所有的代码,当然避免了Sync()调用像瘟疫。我试图复制我的测试服务器(OSX)上的问题,但没有运气。当然,这可能只是因为生产服务器被许多人以那么多不可预测的方式使用,我根本无法通过压力测试复制…

解决方法

我的猜测是猫鼬。如果你在Mongo中存储大的有效负载,Mongoose可能会很慢,因为它建立Mongoose对象。有关该问题的更多详细信息,请参阅 https://github.com/LearnBoost/mongoose/issues/950。如果这是问题,你不会看到它在Mongo本身,因为查询快速返回,但对象实例化可能需要75倍的查询时间。

尝试在创建Mongoose对象之前和之后设置计时器(process.hrtime()),以查看是否可能是问题。如果这是问题,我将切换到直接使用节点Mongo驱动程序,而不是通过Mongoose。

大佬总结

以上是大佬教程为你收集整理的Node.js应用程序有定期的慢度和/或超时(不接受传入的请求)全部内容,希望文章能够帮你解决Node.js应用程序有定期的慢度和/或超时(不接受传入的请求)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。