網路庫中線程開啟的最大檔案描述符數量超過限制處理

2022-07-20 04:51:12 字數 551 閱讀 5747

當用epoll監聽accpet的時候,如果執行緒開啟的檔案描述符數量已經達到上限。

當有新的連線到來的時候,epoll被喚醒,accpet的返回值為emfile。

如果不處理emfile,那麼下一輪epoll_wait,會被繼續喚醒,形成類似輪詢的情形。

解決方法為:

調高程序的最大檔案描述符數量。

死等,鴕鳥演算法。直到能夠accpet到檔案描述符

關閉程序。

不在監聽listen fd

使用et模式,但是,當漏掉依次accept的時候,那麼以後就再也不會收到連線了。

實現準備乙個檔案描述符,在收到emfile的時候就關閉它,然後accetp,緊接著再關閉,再次開啟原來的檔案描述符。

定時踢掉沒有資料的連線。

方法6,存在競爭的情況。(是在沒想出來,為什麼會競爭,執行緒間的檔案描述符,也不共享。)可能是訊號中開啟檔案?

如果使用方法4,那麼需要配合乙個自定的檔案描述符上限,乙個原子變數示開啟的檔案描述符,超過上限,accept以後,直接關閉。

方法7,定時踢掉沒有資料的連線,參照:定時踢掉空閒連線

檢視Linux最大檔案描述符數

1.系統最大開啟檔案描述符數 proc sys fs file max 2.檢視 cat proc sys fs file max 3.重新設定 臨時性 echo 1000000 pro sys fs file max 永久性 在配置檔案 etc sysctl.conf中設定 fs.file max...

Linux最大開啟檔案描述符數

1.系統最大開啟檔案描述符數 proc sys fs file max a.檢視 cat proc sys fs file max 186405 2.設定 a.臨時性 echo 1000000 proc sys fs file max 2.永久性 在 etc sysctl.conf中設定 fs.fi...

Linux最大開啟檔案描述符數

標籤 linux 最大檔案描述符 2013 10 28 19 34 12959人閱讀 收藏舉報 linux 3 1.系統最大開啟檔案描述符數 proc sys fs file max a.檢視 cat proc sys fs file max 186405 2.設定 a.臨時性 echo 10000...