我正在AWS虛擬機(ubuntu)上開發一個用於在線安卓遊戲的java服務器。我做了一個測試,表明我最多可以連接到服務器4080客戶端。如果有更多客戶想連接,我會得到「SocketException:打開太多文件」。我檢查了限制的數量:「ulimit -n」給我1024.將它改爲4096並沒有改變。Ubuntu上的TCP連接的最大數量
爲任何接受的套接字創建一個新線程,它們當前不執行任何操作,直到停止服務器爲止。
在建立了所有4080個連接後,我觀察到使用了大約1GB的ram。我總共有2GB。
我們該如何處理更多的tcp連接?我的多線程方法是否有用,或者我應該爲成千上萬的客戶遵循不同的方法?
沒有看到代碼,我不能發表評論。雖然,看起來你每次請求都會打開新的套接字。 –
@ bobs_007你的猜測是正確的。 – user3703595
@ user3703595你的問題是關於配置你的操作系統,而不是一個特定的java問題。無論如何,你可以檢查例如你是否需要任何新客戶端的套接字。你有沒有聽說過java nio? (http://archive.oreilly.com/pub/a/onjava/2004/09/01/nio.html) – GhostCat