2012-04-19 69 views
3

我有一種情況,我正陷入短暫的端口耗盡,然後導致異常。我想扼殺連接以避免這種情況。有沒有辦法來檢測正在使用的臨時端口的數量?如何查找正在使用的臨時端口的數量?

感謝, 埃裏克

+0

如果您跟蹤有多少你的應用程序已打開,那將是一個良好的第一級近似。由於UDP和TCP通過(本地IP,對等IP,本地端口,遠程端口)跟蹤會話 - 我可以使用任何單個端口連接成千上萬的連接,所以我非常懷疑你是否陷入了短暫的端口耗盡給少數同行或數十萬同齡人。在查看代碼以解決此問題之前,請檢查'netstat'輸出或您的平臺的'netstat'的等效項目以進行調試。也許文件描述符或套接字限制更可能。 – sarnold 2012-04-19 22:00:59

+1

我們使用Azure虛擬機中的Azure存儲,在Azure上遇到了這種情況。我們從錯誤中確認這是一個短暫的端口問題。此外,增加限制(從5k - > 2k)和減少重新使用的時間解決了這個問題。問題是我們不想在每個虛擬機上執行此操作。 – 2012-04-20 21:28:03

+0

Azure不會默認重複使用現有的連接? – sarnold 2012-04-20 21:39:30

回答

1

你可以運行的臨時TCP端口的唯一方法是,如果你是客戶,你已經開了近64K的出站連接,而不是關閉他們在最後兩分鐘內。

這有時會發生在測試場景中,但它並不代表真實世界的情況,因此它沒有真正的興趣。

這種情況的症狀是連接時發生綁定錯誤。如果你沒有收到綁定錯誤,你就沒有這個問題。

+3

我們使用Azure虛擬機中的Azure存儲,在Azure上遇到了這種情況。我們從錯誤中確認這是一個短暫的端口問題。此外,增加限制(從5k - > 2k)和減少重新使用的時間解決了這個問題。 從Azure VM轉到Azure存儲使用的是非常近的(1跳)10 GigE連接。每個存儲操作都使用新的TCP連接。默認情況下,Windows僅爲臨時端口保留5k端口。我們可以增加它,但這需要修改註冊表並重新啓動。當我們接近極限時,我更願意加油門。 – 2012-04-20 21:31:16

1

要獲得打開的連接列表,您可以使用netstat命令。與普遍認爲(其他答案)相反,短暫端口的數量是有限的(在Windows 2003上是4000,在更高版本上是16000,在大多數Linux上是16000)。還要注意,一旦它變得未使用,需要4分鐘才能釋放端口,因此它確實可能是一個問題。

有文章在MSDN和它打交道:http://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx

相關問題