Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets Node.js中的inet流套接字使用多少内存?_Sockets_Tcp_Node.js_Capacity Planning - Fatal编程技术网

Sockets Node.js中的inet流套接字使用多少内存?

Sockets Node.js中的inet流套接字使用多少内存?,sockets,tcp,node.js,capacity-planning,Sockets,Tcp,Node.js,Capacity Planning,当然,如果客户端速度太慢,无法读取服务器的写操作,那么数据可能会被缓冲并增长[1] 但是默认的缓冲区大小是多少?我假设它是在/proc/sys/net/ipv4/tcp\u rmem和tcp\u wmem(假设是Linux)中配置的 我正在做一些基本的容量规划。如果我有一个512MB内存的VPS,并且我假设操作系统等将使用~100MB,那么我的应用程序有~400MB的内存用于它想做的任何事情。如果每个连接的客户端(常规旧TCP/IP套接字)默认需要8KB(4KB读,4KB写),那么我就有400M

当然,如果客户端速度太慢,无法读取服务器的写操作,那么数据可能会被缓冲并增长[1]

但是默认的缓冲区大小是多少?我假设它是在/proc/sys/net/ipv4/tcp\u rmem和tcp\u wmem(假设是Linux)中配置的

我正在做一些基本的容量规划。如果我有一个512MB内存的VPS,并且我假设操作系统等将使用~100MB,那么我的应用程序有~400MB的内存用于它想做的任何事情。如果每个连接的客户端(常规旧TCP/IP套接字)默认需要8KB(4KB读,4KB写),那么我就有400MB/8KB=~50000个客户端的容量


[1] 我一点也不知道,每个平台的情况可能有所不同,但下面是你如何找到答案的

使用此代码:

var net = require('net');

net.createServer(function (socket) {
    socket.on('data', function(data) {
      console.log('chunk length: ' + data.length);
    });
}).listen(function() {
    console.log("Server listening on %j", this.address());
});

然后使用脚本启动时吐出的端口号通过“nc localhost$port”对一个大文件(如ISO)进行cat,并观察输出以查看最大块大小。在我的OS X机器上,看起来最大的缓冲区是40960字节,但在你的机器上可能不同。

我真的认为你不必担心这里的细节。你是在正确的范围内,无论确切的数字是25000、40000或60000,一旦你同时访问了那么多的用户,你将能够在VPS中提供更多的内存:P同样,在这些数字上,你开始遇到操作系统连接太多的问题。是的,当然是这样。我只是想得到一些基线数量的最大连接/主机。我的计划是在客户端想要连接到“集群”时,使用多个这样的主机并将客户端直接连接到负载最少的主机。但我需要知道什么时候需要更多面向客户端的主机。当然,需要平均负载和其他指标,但我的应用程序不太受CPU限制,因此决定何时以及如何增长的主要因素是RAM。谢谢