为什么客户端使用更多内存与不同的服务器?

问题描述:

我在NodeJS请求计数和.Net Core上做了一些性能测试,我发现了我期待的。很明显,.Net Core的请求数量要高得多。但是,我发现特别有趣的是客户端在不重新编译代码的情况下,通过NodeJS服务器与.Net Core服务器实际使用更多的RAM。 RAM使用率差异实际上相当显着,我观察到NodeJS服务器的性能远高于.Net Core服务器。为什么客户端使用更多内存与不同的服务器?

使用.NET的核心2.0.0和8.3.0的NodeJS

有问题的泛洪。使用.Net核心服务器,在最坏的使用情况下,运行使用从480MB到700MB的任何地方。使用NodeJS服务器,它在我的PC上使用700MB到1.4GB的RAM(两者都是最大的CPU)。

Flooder code

HttpServer.cs is the actual code that does the work 
Source.cs is where the HttpServer is run in a separate task to allow Console.ReadLine separately. 

Git link to .Net Core server

的的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?

+1

我唯一能想到的是,使用node.js服务器,客户端同时拥有更多的同时连接。也可能需要在每台服务器上支持http版本。一个可能正在运行http/2。 – jfriend00

+0

你认为会有更多的连接吗? C#中的任务是多线程的,NodeJS使用1个线程。完成的NodeJS请求数大约是483k,而C#服务器请求数大约是780k –

+0

我只是提供一些想法来探索可以解释差异。 – jfriend00

找到了解决方案。问题在于客户本质上创造了无数的请求。服务器能够响应这些请求的速度越快,它们在客户端的处理速度就越快。因此,在对Node的HTTP服务器进行集群之后,内存使用量大大减少。

速度

用的NodeJS集群:935k请求,最低360MB的RAM,最高680MB 对.NET核心:780K请求,最低580MB RAM,800MB最高的NodeJS 没有集群:435k请求,最低RAM 800MB,最高1.4 GB

谢谢jfriend00,帮助我找出真正的来源。这也是一个很好的指标,说明服务器如何“快速”(以RAM为代价),以便在处理时查看RAM的使用情况。