首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux中处理c10k

在linux中处理c10k
EN

Stack Overflow用户
提问于 2012-11-27 21:33:07
回答 2查看 679关注 0票数 0

使用linux BSD套接字,如果活动连接数超出系统限制怎么办?会接受呼叫返回错误吗?

即使系统可以接受不确定的套接字连接,它是否可以超过整数最大值的大小?

套接字描述符是一个4字节的整数值。公平地说,在32位系统中,单进程保持超过4294967295个活动TCP连接理论上是不可能的吗?(假设硬件和操作系统可以支持此功能。服务质量无关紧要。我们只是想保持活动的TCP连接)

这可能是一个愚蠢的问题,但我很好奇。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 22:36:14

因为文件描述符是整型的,所以显然不能超过4G的文件描述符。即使在64位系统上也是如此,因为sizeof(int)仍然是4。理论上,您可以跨多个进程打开更多的文件描述符。即使您增加了所有的/proc限制,您也很可能首先耗尽内核内存。

linux内核中的每个套接字分配都在千字节范围内,因此即使在大型服务器(具有许多GB的ram)上,最大连接计数也是以百万而不是数十亿为单位的。

票数 1
EN

Stack Overflow用户

发布于 2012-11-27 22:02:21

从Linux系统上的accept(2)手册页:

代码语言:javascript
复制
       EMFILE The per-process limit of open file descriptors has been reached.

       ENFILE The system limit on the total number of open files has been reached.

       ENOBUFS, ENOMEM
              Not enough free memory.  This often means that the memory allocation is limited by the socket buffer limits, not by the
              system memory.

所以,是的,在任何远程正常配置中,accept都会报告EMFILE或ENFILE。如果您将fd限制设置为某个极高的值,则可能会得到ENOBUFS/ENOMEM。您很可能会在int数据类型的INT_MAX限制之前很久就达到这些限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13585380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档