C# 为什么客户端在不同的服务器上使用更多的ram?

C# 为什么客户端在不同的服务器上使用更多的ram?,c#,node.js,memory,C#,Node.js,Memory,我对NodeJS请求计数与.Net内核进行了一些性能测试,结果完全符合我的预期。显然.Net内核的请求计数要高得多。但是,我发现特别有趣的是,在不重新编译代码的情况下,客户端实际上通过NodeJS服务器使用了比.Net核心服务器更多的RAM。RAM的使用差异实际上相当显著,我观察到NodeJS服务器的峰值比.Net核心服务器的峰值高得多 使用.Net Core 2.0.0和NodeJS 8.3.0 有问题的洪水。对于.NETCore服务器,在最坏的使用情况下,运行时使用的内存从480MB到700

我对NodeJS请求计数与.Net内核进行了一些性能测试,结果完全符合我的预期。显然.Net内核的请求计数要高得多。但是,我发现特别有趣的是,在不重新编译代码的情况下,客户端实际上通过NodeJS服务器使用了比.Net核心服务器更多的RAM。RAM的使用差异实际上相当显著,我观察到NodeJS服务器的峰值比.Net核心服务器的峰值高得多

使用.Net Core 2.0.0和NodeJS 8.3.0

有问题的洪水。对于.NETCore服务器,在最坏的使用情况下,运行时使用的内存从480MB到700MB不等。对于NodeJS服务器,它在我的PC上使用了700MB到1.4GB的RAM(这两个都是CPU的最大容量)

NodeJS服务器代码

const http = require('http')

let serv = http.createServer((req, res) => {
    res.write("Hello!")
    // res.destroy() // Uncomment to reduce RAM usage, but the point is still valid
})

serv.listen(48435)

是什么导致RAM使用率如此显著的差异,最重要的是,为什么客户会因此受到惩罚?我知道服务器使用了更多的RAM、处理器,或者只是速度较慢,但是为什么在某些情况下,为客户端做同样事情的相同代码使用的RAM几乎是RAM的两倍呢?

找到了解决方案。问题在于,客户机本质上创建了无限量的请求。服务器响应这些请求的速度越快,它们在客户端的处理速度就越快。因此,在集群节点的HTTP服务器之后,RAM的使用量大大减少

速度

集群节点:935k请求,最低RAM 360MB,最高680MB .Net核心:780k请求,最低ram 580MB,最高800MB NodeJS无集群:435k请求,最低RAM 800mb,最高1.4GB


感谢jfriend00帮助我找到了真正的来源。这也是一个很好的指标,表明服务器在处理过程中查看RAM使用情况的“速度”(以RAM为代价)有多快。

找到了解决方案。问题在于,客户机本质上创建了无限量的请求。服务器响应这些请求的速度越快,它们在客户端的处理速度就越快。因此,在集群节点的HTTP服务器之后,RAM的使用量大大减少

速度

集群节点:935k请求,最低RAM 360MB,最高680MB .Net核心:780k请求,最低ram 580MB,最高800MB NodeJS无集群:435k请求,最低RAM 800mb,最高1.4GB


感谢jfriend00帮助我找到了真正的来源。这也是一个很好的指标,表明服务器在处理过程中查看RAM使用情况的“速度”(以RAM为代价)有多快。

我能想到的唯一一件事是,使用node.js服务器时,客户端一次拥有更多的同时连接。还可能与每个服务器中的http版本支持有关。一个可能正在运行http/2。你认为还会有那么多的连接吗?任务在C#中是多线程的,NodeJS使用1个线程。完成的NodeJS请求数约为483k,而C#server请求数约为780k。我只是想为您提供一些可以解释差异的想法。仅仅因为node.js是单线程的,并不意味着它不能同时处理大量请求——它可以。这取决于这些请求做什么,以及服务器如何处理传入的TCP连接(当存在超出其处理能力的连接时)。@jfriend00只是一个更新。在NodeJS代码中添加了集群,RAM使用率下降到了我编写的.Net核心代码之下,实际输出了134904个请求,证实了客户机“持有”请求是导致RAM问题的原因。我唯一能想到的是node.js服务器,客户端一次具有多个同时连接。还可能与每个服务器中的http版本支持有关。一个可能正在运行http/2。你认为还会有那么多的连接吗?任务在C#中是多线程的,NodeJS使用1个线程。完成的NodeJS请求数约为483k,而C#server请求数约为780k。我只是想为您提供一些可以解释差异的想法。仅仅因为node.js是单线程的,并不意味着它不能同时处理大量请求——它可以。这取决于这些请求做什么,以及服务器如何处理传入的TCP连接(当存在超出其处理能力的连接时)。@jfriend00只是一个更新。在NodeJS代码中添加了集群,RAM使用率降到了我所做的.Net核心代码的下面,并实际产生了134904个请求的输出,证实了客户机对请求的“持有”是导致RAM问题的原因
const http = require('http')

let serv = http.createServer((req, res) => {
    res.write("Hello!")
    // res.destroy() // Uncomment to reduce RAM usage, but the point is still valid
})

serv.listen(48435)