Linux對外連線埠數限制

軍說網事發表於2015-06-30

這兩天做壓力測試,發現了一個問題,當模擬TCP client對外發起連線數達到28000左右時,開始大量拋如下異常:

    java.net.BindException:Cannot assign requested address

    atsun.nio.ch.Net.connect0(Native Method)

    atsun.nio.ch.Net.connect(Net.java:364)

    atsun.nio.ch.Net.connect(Net.java:356)

    atsun.nio.ch.UnixAsynchronousSocketChannelImpl.implConnect(UnixAsynchronousSocketChannelImpl.java:326)

    atsun.nio.ch.AsynchronousSocketChannelImpl.connect(AsynchronousSocketChannelImpl.java:195)

    atcom.aliyun.talk.mon.stack.comm.AsyncConnection.connect(AsyncConnection.java:85)

    研究發現,Linux對外的隨機分配埠是由一定限制的,理論上單機對外的埠最大值為65535,除去一些保留埠和被佔用埠外,也應該在6W左右,但實際上單機建立對外連線時,預設不超過28232個連線。

    執行以下命令就很清楚原因了:

    $ cat /proc/sys/net/ipv4/ip_local_port_range

輸出結果為:

    32768  61000

    這就是Linux隨機分配埠的範圍,如果在該範圍內有被佔用的埠,那麼連線數肯定小於28232.如果想更改這個範圍,可以執行以下命令:

    #echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range




相關文章