Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nginx性能问题_Node.js_Performance_Nginx_Apachebench - Fatal编程技术网

Node.js Nginx性能问题

Node.js Nginx性能问题,node.js,performance,nginx,apachebench,Node.js,Performance,Nginx,Apachebench,我在使用Nginx时遇到一些性能问题 我有一台Nginx服务器,位于4个node.js应用程序前面。节点应用程序不做任何花哨的事情,它只是在expressJS堆栈中循环,不访问任何外部数据库源,等等 我使用ApacheBench来获取应用程序性能的基准。当我在上游规则中使用一台服务器时,我得到一个恒定的1000 req/s吞吐量。例如: upstream cp_backend { server 10.134.14.128:5000; keepalive 32; } upstre

我在使用Nginx时遇到一些性能问题

我有一台Nginx服务器,位于4个node.js应用程序前面。节点应用程序不做任何花哨的事情,它只是在expressJS堆栈中循环,不访问任何外部数据库源,等等

我使用ApacheBench来获取应用程序性能的基准。当我在
上游
规则中使用一台服务器时,我得到一个恒定的
1000 req/s
吞吐量。例如:

upstream cp_backend {
    server 10.134.14.128:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    server 10.134.26.172:5000;
    keepalive 32;
}
返回
1000请求/s
。添加第二个节点应用程序(在第二台服务器上运行)时,例如:

upstream cp_backend {
    server 10.134.14.128:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    server 10.134.26.172:5000;
    keepalive 32;
}
我看到大约2000个请求/秒吞吐量(如预期)

但是,一旦我添加了2台以上的后端服务器,应用程序就不再线性扩展。例如:

upstream cp_backend {
    server 10.134.14.128:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    keepalive 32;
}
upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    server 10.134.26.172:5000;
    keepalive 32;
}
仅返回大约
2500请求/s
,而不是预期的
3000
。同样地:

upstream cp_backend {
    server 10.134.14.128:5000;
    server 10.134.34.226:5000;
    server 10.134.26.172:5000;
    server 10.134.26.178:5000;
    keepalive 32;
}
仅返回大约3000个请求/s,而不是预期的
4000

来提供更多的背景资料。我已经测试了另一个(非nodeJS)应用程序,该应用程序在这些相同的服务器上运行,并且我能够获得超过17k的req/s,因此我知道Nginx和我的测试机器能够达到这些数字。同样值得一提的是,17k测试中的
内容长度实际上比node应用程序大

每个节点应用程序都在一个单独的虚拟机上运行,并拥有自己的资源。当使用像
top
这样的简单工具时,我看不到任何主要的瓶颈。另外,我知道当使用单个上游服务器时,node.js VM能够处理1000个请求/秒。似乎这是一个nginx瓶颈,因为我可以通过nginx直接获得1000个req/s。如果我知道每个节点应用程序都能够
1000请求/s
,为什么我不能用4个
上游
服务器实现
4k请求/s


关于使用好的分析软件有什么建议吗?

因为您没有指定任何诊断尝试,或者您正在开发哪种硬件,所以您不会得到很好的答案

我认为这是由于你的硬件造成的某种资源短缺。您可能正在耗尽CPU或使网络连接饱和

每个节点应用程序都有自己的线程,但如果其中两个线程运行在同一个内核上,那么它们可能会影响彼此的性能。即使每个应用程序都在自己的核心上运行,也可能会使总线饱和

如果是网络饱和,那只意味着你的应用程序正在争夺带宽,应该给予更好的网络隔离

最后,运行ApacheBench的计算机可能很难跟上


在任何情况下,都可以找到一些硬件探查器,看看您的硬件在做什么,因为您的服务器显然要强大得多,而且扩展得很好。

需要了解每个节点上CPU和内存利用率的详细信息,以了解瓶颈,包括nginx代理服务器

不过,在代理服务器中连接两个以上的上游服务器时,最好使用“least_conn”参数。这将确保服务器负载分布相等,而不是此时负载最少的服务器

您将从中获得更多信息

您可能还需要调整Nginx。

谢谢您的回复。每个节点应用程序都在自己的核心上运行,因为每个节点应用程序都有自己的专用VM。正如您在我的示例中所看到的,每个节点应用程序都有自己的IP地址。正如您在我的示例中所看到的,每个节点应用程序都有自己的IP地址。如果是网络,我不希望在同一台服务器上运行不同的应用程序(具有更大的内容长度)时获得17k req/s……您可以在虚拟化环境中为每个应用程序指定不同的IP。您没有明确说明任何详细信息。很抱歉,澄清一下,每个节点应用程序都在digital ocean中的单独VM上运行。当使用像
top
这样的简单工具时,我看不到任何主要的瓶颈。另外,我知道当使用单个上游服务器时,node.js VM能够处理1000个请求/秒。似乎这是一个nginx瓶颈,因为我可以通过nginx直接获得1000个req/s。关于使用好的分析软件有什么建议吗?请编辑您的原始答案以提供这些详细信息。