golang 未關閉連線造成的血案

2021-07-25 11:28:47 字數 633 閱讀 8147

正常來說,tcp連線的兩端在使用完成要及時關閉連線,特別是主動連線的一方(客戶端)使用完要主動關閉。

最近就遇到沒有關閉連線造成重大問題的案例。

1. 乙個服務端程式需要呼叫第三方服務,呼叫完後,沒有關閉連線。

後果:服務端程式使用記憶體不斷**,不斷**,不斷**,最後掛掉。

未解決前,只能通過監控,記憶體快沒有時重啟一下。

解決:http請示呼叫第三方服務後,關閉連線。

2.乙個hadoop的hdfs客戶端,也是呼叫完沒有關閉連線。

後果:namenode的fin2_wait越來越多,fin2_wait越來越多,fin2_wait越來越多,並不會自動降下來,然後造成很多namenode的連線timeout。

嘗試的解決:在namenode伺服器各種核心引數調整未能起作用。根據tcp連線原理,我們也了解到fin2_wait是因為客戶端沒有關閉連線造成的,也定位到所在的客戶端伺服器,對呼叫namenode比較明顯的服務進行**review,未發現未關閉情況。

未解決前,重啟hadoop,淚呀。

解決:乙個忽略的服務中不明顯的get請求,http連線後沒有關閉,因此使用完close即可。

兩個案例說明關閉連線的重要性,不是不必要的。平時強調,但還是沒有注意到,需要加強壓力測試和**審查。

連線池未關閉問題的發現與解決

最近專案上線,但是大下午的客服反應專案登入頁面很慢,sa發現後立馬重啟後專案訪問速度恢復。排查問題時,發現nginx的頁面訪問速度都是在十秒左右,有部分二十秒,這個時間很奇怪。日誌顯示,專案並沒有什麼特殊的錯誤異常。跟據經驗立馬確認了下連線池的maxwait時間為10000,與是百分之九十肯定是專案...

使用DBCP連線池檢測未關閉的資料庫連線

我一直使用dbcp連線池,效果還不錯。最近因為朋友的乙個j2ee應用一上連線池,很快就會報connection pool exhausted的錯誤,所以 特地研究了一下如何自動檢測未關閉的資料庫連線的技術。研究了tomcat文件中datasource一章,發現有專門的preventing db co...

配艙單未關閉的

indexed view create view dbo view peicangdans as 某些配艙單,沒有推櫃,也沒有排櫃,最後不了了之的配艙單彙總,統計是統計兩個星期的 with c1 as select 配艙單資訊表.配艙確認單號,配艙單資訊表.箱型,配倉單明細表.訂單號,配艙單資訊表....