簡體   English   中英

Ubuntu上的最大TCP連接數

[英]Maximum number of TCP connections on Ubuntu

我正在AWS虛擬機(ubuntu)上開發Java服務器,該服務器將用於在線android游戲。 我進行了一項測試,顯示最多可以將4080個客戶端連接到服務器。 如果更多的客戶端想要連接,我會收到“ SocketException:打開的文件太多”的信息。 我檢查了限制數:“ ulimit -n”給了我1024。將其更改為4096並沒有改變。

將為任何接受的套接字創建一個新線程,並且它們當前不執行任何操作,並且在我停止服務器之前一直處於活動狀態。

建立所有4080個連接后,我觀察到使用了大約1gb的ram。 我總共有2GB。

我們如何處理更多的TCP連接? 我的多線程方法有用嗎?還是應該為成千上萬的客戶采用不同的方法?

ulimit變量實際上不是系統范圍的參數。 它們是根據流程屬性設置的,並由子級嵌套。 請確保您從已經提高了ulimit的進程中運行Java服務器。

UX上的每個子進程都從其父級繼承所有打開的文件描述符。 生成一個孩子作為網絡客戶端有點棘手,因為您需要顯式關閉該孩子中所有不必要的描述符(即stdin,out和err的0、1、2)。

這也與打開套接字有關(根據舊的“一切都是文件”策略),因此,如果套接字上有一個偵聽器並生成一個子代,則該套接字已經打開。 您可以復制此套接字,但需要關閉子套接字等中的原始套接字。

暫無
暫無

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

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