Windows

Oracle 11g TNSLSNR LAST_ACK 連接泛洪

  • December 21, 2013

我們有安裝了 Oracle 11.2.0.1.0 DB 的 Windows 2k3 EE SP2。數據庫被不同的應用程序(包括網路應用程序和服務)使用。有時,我們的 Web 應用程序會出現一些問題,這些問題會導致其中出現意外行為,例如頁面載入緩慢或未完全載入、奇怪的重定向。重新啟動 Tomcat 和 Oracle 服務可解決此問題。

當問題再次出現時,我查看了 tomcat 日誌並註意到一個異常:

java.sql.SQLException: Io exception: The Network Adapter could not establish the connection

我突然想到數據庫伺服器可能很忙、過載或其他原因,所以我檢查了網路活動(使用 CurrPorts)。有數十個連接掛起,狀態為“Last Ack”,這些連接源自 Oracle TNSLSNR.exe 程序,請求本地埠 1521(我們知道,該埠是程序本身“偵聽”的埠)。

CurrPorts 軟體在右鍵點擊時有“關閉選定的 TCP 連接”選項,所以我將它用於所有這些死連接。它立即修復了網路應用程序遇到的連接問題。最糟糕的是,這種情況會再次出現,因為每小時會出現一到兩次卡在 Last ack 的新連接。

所有這一切意味著每隔幾天,我必須手動關閉這些連接,因為我不知道它們為什麼會發生,也不知道現在的解決方案。

所以,我想知道這可能是什麼原因?

問題圖片

這是TCP狀態圖的圖片:

系統在LAST_ACK收到 aFIN並成為“被動”更接近時結束。

FIN然後系統的 IP 堆棧用 an響應ACK並將相關的套接字設置為CLOSE_WAIT

然後應用程序需要意識到套接字已經完成,呼叫close()套接字,然後系統的 IP 堆棧發送 aFIN並將套接字設置為LAST_ACK

然後遠端端需要響應 anACK並且套接字變為CLOSED. 這是沒有發生的步驟。

我看到您使用本地系統的 IP 地址作為源和目標。很抱歉,我對 Windows 上的本地主機通信了解的不多。這可能是 Windows 問題或 Oracle 問題。我希望至少可以幫助您了解正在發生的事情,如果不是為什麼

引用自:https://serverfault.com/questions/558266