解決接口調(diào)用報(bào)錯newSocketStream(..)failed:Too?many?open?files問題
問題描述
在調(diào)用微服務(wù)接口時,出現(xiàn)報(bào)錯
newSocketStream(..) failed: Too many open files
具體錯誤信息如下:

原因分析
報(bào)錯字面意思是程序打開的文件數(shù)過多
程序打開的文件數(shù)過多,不過這里的files不單是文件的意思,也包括打開的通訊鏈接(比如socket),正在監(jiān)聽的端口等等,所以有時候也可以叫做句柄(handle),這個錯誤通常也可以叫做句柄數(shù)超出系統(tǒng)限制。
第一時間想到的是程序異常報(bào)錯,進(jìn)程未正常結(jié)束或者請求次數(shù)異常增大,但是實(shí)際上這些情況并未發(fā)生。
接著只能求助于網(wǎng)上的大神,查詢問題,基本上都是說句柄數(shù)超出系統(tǒng)限制
解決方案
于是按照網(wǎng)上的解決方法操作:
- 先查看進(jìn)程描述符
ulimit -a - 查看當(dāng)前系統(tǒng)打開的文件數(shù)量
lsof | wc -l - 查看某一進(jìn)程的打開文件數(shù)量
lsof -p pid | wc -l - 增大允許打開的文件數(shù)
ulimit -n 1024000
增大允許打開的文件數(shù):
1.臨時(重啟后失效): ulimit -n 1024000(非root用戶限制到4096)
2.永久生效(需要重啟)vim /etc/security/limits.conf #在最后加入 * soft nofile 1024000 * hard nofile 1024000

在查看當(dāng)前系統(tǒng)打開的文件數(shù)量,出現(xiàn)問題

出現(xiàn)這個問題的情況 ,一般有兩種:
- 系統(tǒng)中有容器在運(yùn)行該進(jìn)程
- 啟動進(jìn)程后,刪除了相關(guān)進(jìn)程的文件,導(dǎo)致進(jìn)程異常
到這里我其實(shí)已經(jīng)發(fā)現(xiàn)問題似乎不是這個,再次查詢程序進(jìn)程打開文件數(shù)量,發(fā)現(xiàn)只有5個,確定不是應(yīng)用程序文件打開過多的問題。
網(wǎng)上查詢也實(shí)在沒有啥好的解決方法(重啟程序也試過了)
后面我查詢運(yùn)行程序的時候,發(fā)現(xiàn)了用戶問題,有的是root啟動的,有的又是非root用戶

而報(bào)錯的程序就是root用戶啟動的,于是懷著試一試的心態(tài),將程序改為非root用戶啟動,結(jié)果接口訪問成功了!?。?!
總結(jié)
雖然問題解決了,但是我也是云里霧里的。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中連接數(shù)據(jù)庫方式詳細(xì)步驟記錄
這篇文章主要介紹了Java中連接數(shù)據(jù)庫方式的詳細(xì)步驟,包括添加依賴、建立連接、執(zhí)行SQL語句、處理結(jié)果集和關(guān)閉連接,還討論了數(shù)據(jù)庫連接池的使用,需要的朋友可以參考下2025-01-01
Mybatis如何通過出入Map參數(shù)作為條件進(jìn)行查詢
這篇文章主要介紹了Mybatis如何通過出入Map參數(shù)作為條件進(jìn)行查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
淺析java中String類型中“==”與“equal”的區(qū)別
這篇文章主要介紹了淺析java中String類型中“==”與“equal”的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄
這篇文章主要介紹了關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java使用NIO優(yōu)化IO實(shí)現(xiàn)文件上傳下載功能
IO 是基于流來讀取的,而NIO則是基于塊讀取,面向流 的 I/O 系統(tǒng)一次一個字節(jié)地處理數(shù)據(jù),這篇文章主要介紹了Java使用NIO優(yōu)化IO實(shí)現(xiàn)文件上傳下載功能,需要的朋友可以參考下2022-07-07
SpringBoot整合Mybatis簡單實(shí)現(xiàn)增刪改查
這篇文章主要介紹了SpringBoot整合Mybatis簡單實(shí)現(xiàn)增刪改查,文章為圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)
這篇文章主要介紹了Java中SpringBoot如何實(shí)現(xiàn)基本的增刪改查,前后端分離版,沒有和前端進(jìn)行聯(lián)系,感興趣的小伙伴可以借鑒閱讀本文2023-03-03
MyBatis中調(diào)用存儲過程和函數(shù)的實(shí)現(xiàn)示例
在MyBatis中調(diào)用存儲過程和函數(shù)是一個相對高級的特性,本文主要介紹了MyBatis中調(diào)用存儲過程和函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

