解決接口調(diào)用報(bào)錯(cuò)newSocketStream(..)failed:Too?many?open?files問題
問題描述
在調(diào)用微服務(wù)接口時(shí),出現(xiàn)報(bào)錯(cuò)
newSocketStream(..) failed: Too many open files
具體錯(cuò)誤信息如下:
原因分析
報(bào)錯(cuò)字面意思是程序打開的文件數(shù)過多
程序打開的文件數(shù)過多,不過這里的files不單是文件的意思,也包括打開的通訊鏈接(比如socket),正在監(jiān)聽的端口等等,所以有時(shí)候也可以叫做句柄(handle),這個(gè)錯(cuò)誤通常也可以叫做句柄數(shù)超出系統(tǒng)限制。
第一時(shí)間想到的是程序異常報(bào)錯(cuò),進(jìn)程未正常結(jié)束或者請(qǐng)求次數(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.臨時(shí)(重啟后失效): 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)這個(gè)問題的情況 ,一般有兩種:
- 系統(tǒng)中有容器在運(yùn)行該進(jìn)程
- 啟動(dòng)進(jìn)程后,刪除了相關(guān)進(jìn)程的文件,導(dǎo)致進(jìn)程異常
到這里我其實(shí)已經(jīng)發(fā)現(xiàn)問題似乎不是這個(gè),再次查詢程序進(jìn)程打開文件數(shù)量,發(fā)現(xiàn)只有5個(gè),確定不是應(yīng)用程序文件打開過多的問題。
網(wǎng)上查詢也實(shí)在沒有啥好的解決方法(重啟程序也試過了)
后面我查詢運(yùn)行程序的時(shí)候,發(fā)現(xiàn)了用戶問題,有的是root啟動(dòng)的,有的又是非root用戶
而報(bào)錯(cuò)的程序就是root用戶啟動(dòng)的,于是懷著試一試的心態(tài),將程序改為非root用戶啟動(dòng),結(jié)果接口訪問成功了?。。。?/p>
總結(jié)
雖然問題解決了,但是我也是云里霧里的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java如何通過Socket實(shí)現(xiàn)查詢IP
在本文中,我們來學(xué)習(xí)下如何找到連接到服務(wù)器的客戶端計(jì)算機(jī)的IP地址。我們將創(chuàng)建一個(gè)簡(jiǎn)單的客戶端-服務(wù)器場(chǎng)景,讓我們探索用于TCP/IP通信的java.net?API,感興趣的可以了解一下2022-10-10第一次使用Android Studio時(shí)你應(yīng)該知道的一切配置(推薦)
這篇文章主要介紹了第一次使用Android Studio時(shí)你應(yīng)該知道的一切配置(推薦) ,需要的朋友可以參考下2017-09-09Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式解析
這篇文章主要介紹了Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式,結(jié)構(gòu)型設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,需要的朋友可以參考下2016-02-02Springboot中如何使用Redisson實(shí)現(xiàn)分布式鎖淺析
redisson是redis的java客戶端程序,國(guó)內(nèi)外很多公司都有在用,下面這篇文章主要給大家介紹了關(guān)于Springboot中如何使用Redisson實(shí)現(xiàn)分布式鎖的相關(guān)資料,需要的朋友可以參考下2021-10-10Mybatis 查詢語(yǔ)句條件為枚舉類型時(shí)報(bào)錯(cuò)的解決
這篇文章主要介紹了Mybatis 查詢語(yǔ)句條件為枚舉類型時(shí)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01JAVA spark創(chuàng)建DataFrame的方法
這篇文章主要介紹了JAVA spark創(chuàng)建DataFrame的方法,幫助大家更好的理解和學(xué)習(xí)spark,感興趣的朋友可以了解下2020-08-08java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析
這篇文章主要介紹了java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09詳解如何在SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果
在一個(gè)完整的項(xiàng)目中,如果每一個(gè)控制器的方法都返回不同的結(jié)果,那么對(duì)項(xiàng)目的維護(hù)和擴(kuò)展都會(huì)很麻煩。因此,本文為大家準(zhǔn)備了SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果的方法,需要的可以參考一下2022-10-10