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

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

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

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

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

