Javascript 性能测试期间NodeJS空闲操作

Javascript 性能测试期间NodeJS空闲操作,javascript,node.js,google-chrome,jmeter,performance-testing,Javascript,Node.js,Google Chrome,Jmeter,Performance Testing,这里的nodejs新手试图找出新构建的应用程序中的性能问题 我正在节点0.12.7应用程序上运行性能测试,发现服务器间歇性挂起。达到该状态后需要重新启动。在确认没有内存泄漏(进程堆不超过500 MB,而默认的最大堆大小是1.4GB,我知道),我们开始检查CPU配置文件。我使用了一个依赖于v8 profiler的函数来获取常规概要文件 下面是我们在jmeter中遇到的图表之一(尽管服务器没有挂起) 通过加载CPU配置文件,我们在Chrome中绘制了火焰图。我本想在这一点上发现JS被卡住了,但我发现

这里的nodejs新手试图找出新构建的应用程序中的性能问题

我正在节点0.12.7应用程序上运行性能测试,发现服务器间歇性挂起。达到该状态后需要重新启动。在确认没有内存泄漏(进程堆不超过500 MB,而默认的最大堆大小是1.4GB,我知道),我们开始检查CPU配置文件。我使用了一个依赖于v8 profiler的函数来获取常规概要文件

下面是我们在jmeter中遇到的图表之一(尽管服务器没有挂起)

通过加载CPU配置文件,我们在Chrome中绘制了火焰图。我本想在这一点上发现JS被卡住了,但我发现正是在这个时间范围内,节点服务器长时间处于空闲状态。有没有人能帮我了解一下,当客户端请求不断轰炸服务器时,服务器保持空闲状态,并最终在10分钟后恢复以继续运行的可能原因

不幸的是,我丢失了用于检查16:48:10和16:57:40之间的响应是否为错误或成功的数据,但它们很可能是来自代理的错误响应,因为节点不关心

以下是镀铬的火焰图表

  • 16时47分前,

  • 大约16.47小时

  • 16点47分后几分钟


    • 这可能有多种原因

    • 服务器不接受请求。到达峰值后,您是否看到吞吐量下降
    • 您是否检查了服务器日志以查看是否记录了任何异常
    • 尝试绘制测试期间响应时间和吞吐量的趋势
    • 您可能希望在代码中看到任何IO绑定的操作
    • 检查处理器队列长度。如果进程没有获得足够的CPU,您应该看到它在不断增加

    • 只是好奇,你是否在当前版本的Node中尝试过该应用程序
      4.5.0
      对于“服务器在被客户端请求轰炸时保持空闲的可能原因是什么”,答案是:您当时没有监视的任何事情。例如:所有东西都在某处等待某个锁(最终释放),端口耗尽(但最终释放),GC速度慢,HD队列(如果应用程序涉及对磁盘的读/写),线程限制。。。很多很多东西。@Tracker1:是的,应用程序(最终)挂起了节点4.x和节点5.xwell@KirilS. 完全正确。我想知道是否有一种已知的方法来监视堆栈中的事件队列/闭包/节点中打开的端口。毫无疑问,一些外部因素起了作用,因为应用程序有时会在几分钟内挂起,有时会在几个小时后挂起。但是,一些java应用程序共享了基础架构,它们似乎对问题具有很强的弹性您在OSX上运行吗?这是OSX上的一个已知问题。谢谢@rachna,有没有办法监视nodejs中io绑定的操作?服务器日志中没有特殊的异常。我不认为请求数量或任何其他参数出现峰值。测试以这种方式持续了一个多小时,这时发生这种情况。您是否有检查队列长度的建议?如果您在基于linux的系统上运行测试,请使用sar命令或在windows中检查性能监视器。合成孔径雷达也将覆盖IO。你能详细介绍一下JMeter的结果吗?可以上传响应时间和吞吐量的图表吗?我在问题开头发布的图片是响应时间图表。遗憾的是,我没有使用侦听器进行吞吐量分析。将尝试并在此处更新。