Golang GC導致的檔案描述符不可用

2021-09-29 11:36:03 字數 535 閱讀 4049

1. 壓力測試時,使用syscall.accept得到 bad file descriptor,server直接無法響應。

1. syscall.accept使用的fd**是在自己**初試化的時候通過tcplistener.file().fd()直接拿到,且在自己的**中通過int 型別儲存了這個返回的系統fd,後續直接使用int 型別儲存的fd值進行epoll相關操作

2.事實上golang 的實現實現中tcplistener.file() 返回的*os.file不是tcplistener原有的*os.file物件,而是dup(拷貝)乙份,同時這個dup動作中會使用系統呼叫對於原來的系統fd也執行一次dup,進而生產乙份新的額系統fd

3.tcplistener.file().fd() 這種使用方式,沒有儲存對於新的*os.file物件的應用,進而在發生gc時,這個*os.file會被清理掉,同時這個物件中的系統fd會被close掉。

當需要使用tcplistener的系統底層提供的檔案描述符(fd)時,tcplistener.file()得到的*os.file()保證不被gc處理。

Crontab導致Linux檔案描述符枯竭問題

crontab導致linux檔案描述符枯竭問題 問題處理過程 根據以上問題,分析步驟如下 1 首先手動執行了一下定時任務,結果執行失敗,通過錯誤判斷是檔案描述符被用光了。具體報錯如下 cannot open shared object file too many open files in syst...

監聽描述檔案

同樣的如果關閉listener程序並不會影響已經存在的資料庫連線。listener.ora listener 程序的配置檔案,oracle根據它來監聽服務 listener description list description address list address protocol ipc ...

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...