簡體   English   中英

在linux中處理c10k

[英]handling c10k in linux

使用linux BSD套接字,如果活動連接數溢出系統限制會發生什么? 會接受來電回復錯誤嗎?

即使系統可以接受無限套接字連接,它是否可以超過整數最大值的大小?

套接字描述符是一個4字節的整數值。 可以公平地說,在32位系統中,單個進程維持超過4294967295活動TCP連接是不可能的? (假設硬件和操作系統可以支持這一點。服務質量無關緊要。我們只想保持活動的TCP連接)

這可能是一個愚蠢的問題,但我很好奇。

從Linux系統上的accept(2)聯機幫助頁:


       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限制之前很久就達到這些限制。

由於文件描述符是整數,那么你顯然不能超過4G文件描述符。 即使在64位系統上也是如此,因為sizeof(int)仍為4.理論上,您可以在多個進程中打開更多文件描述符。 即使你增加了所有/ proc限制,你也可能首先耗盡內核內存。

Linux內核中的每插槽分配都在千字節范圍內,因此即使在大型服務器(具有多GB的RAM)上,最大連接數也以百萬計,而不是數十億計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM