too many open files解决方案
测试环境在运行一段时间后出现了too many open files,导致一个定时上报redis的任务频繁失败。
linux默认为1024,可通过ulimit -n命令进行数量调整。
例:ulimit -n 4096
非root用户最大只能设置到4096,需要更多的话需要root权限。
(具体修改方法链接:Linux TCP连接数限制配置出现open too many open files_Clovemeo的博客-CSDN博客在进行接口测试时,在用户数超过400后,就会出现socket connection reset,明显就是系统无法创建连接,查看此时系统建立的TCP连接,netstat -ant |grepESTABLISHED |wc -l,数量大概1000多。ulimit -n查看系统默认是1024修改限制如下:第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系统用户名),修改Linux系统对用户的关于打开文件数的软限制和硬限制:so.https://blog.csdn.net/Clovemeo/article/details/124954657?spm=1001.2014.3001.5501)
执行命令ps -ef | grep java,查出进程id:13945。
执行lsof -p 13945
发现有大量的文件句柄没有释放。怀疑是组内小伙伴遍历文件时没有close导致。
于是从代码中寻找蛛丝马迹。发现原因是delete方法里使用了DirectoryStream并没有close。
java8里的Files.newDirectoryStream(p),通常都使用try(Files.newDirectoryStream()){ } catch() { }
的方式,来避免显式close释放资源。
因此判断当时写这段代码的同学看Files.newDirectoryStream()示例时,没看到close()方法误以为不需要释放文件就直接进行使用。导致了too many open files的异常。另外需要注意的是,在try()中打开的文件,不要执行删除操作,否则同样会导致句柄无法释放问题。例如:
try(InputStream inputStream = new FileInputStream(new File(path))) {// doSomething(); } catch(Exception e) { }finally{Files.deleteIfExists(Paths.get(path)); }
会导致如下结果:
文件句柄未释放
总结:
遇到too many open files时,- 执行 lsof -p <pid>,查看该进程打开的句柄
若句柄数不正常,则根据打开的句柄检查不正常的原因,若句柄正常,则进行如下第二步。 执行 unlimit -a,查看open files(最大允许打开文件数)
too many open files解决方案相关推荐
- linux 错误 too many open files 解决方案
too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用户最大允许打开文件数量 fdipzone@ubuntu:~$ ulimit ...
- 【git】git下拉项目Pulling is not possible because you have unmerged files解决方案
✨踩坑不易,还希望各位大佬支持一下\textcolor{gray}{踩坑不易,还希望各位大佬支持一下}踩坑不易,还希望各位大佬支持一下
- xposed报错无法下载zip,could not load available zip files解决方案
1.科学上网就可以下载了 2.如果无法科学上网 去https://dl-xda.xposed.info/framework/下载对应版本的zip文件 然后复制到/sdcard/Android/data ...
- Too many files open; check that FILES = 20 in your CONFIG.SYS file 解决方案
运行matlab中出现下面这样的情况: ??? Error using ==> save Too many files open; check that FILES = 20 in your C ...
- git pull 拉取代码的时候报错 Pulling is not possible because you have unmerged files.
项目场景: git pull 拉取代码的时候报错 Pulling is not possible because you have unmerged files. 解决方案: 1. git add - ...
- ecplise 使用 git
有的eclipse已经自带了Git了,就不用安装了.如果,想重新安装,可以先卸载GIT,卸载 不同eclipse卸载不一样: 1.在Eclipse中依次点击菜单"Help"-> ...
- 我可以直接从GitHub运行HTML文件,而不仅仅是查看它们的来源吗?
本文翻译自:Can I run HTML files directly from GitHub, instead of just viewing their source? If I have a . ...
- 【错误记录】Kotlin 编译报错 ( Not nullable value required to call an ‘iterator()‘ method on for-loop range )
文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...
- Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法
如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应的配置,不然工程就找不到对应的Info.p ...
最新文章
- 蓝桥杯-题目:猜算式
- python seaborn 热图_Python-Seaborn热图绘制的实现方法
- WMI in C#[强类型操作]
- string 转化 xml,并找到指定节点及节点值
- react+redux+node报错Tapable.plugin is deprecated. Use new API on `.h ooks` instead
- MYSQL集群的备份与恢复最终版本
- c/c++线性循环队列
- 淘宝大数据体系之数据采集
- java 毛笔字,Photoshop设计唯美大气的毛笔字
- 小学计算机绘图体会,辅导小学生电脑绘画的几点做法
- 查看linux负载的情况
- web安全—万能密码登录(跳过密码验证)
- 计算机无法检测到键盘,电脑无法识别键盘
- RAxML下载与使用与ML建树原理
- 蓝牙音箱硬件设计分享
- notion函数_用好这些实用模板,把 Notion 打造成全能助理
- 2020寒假集训排位赛 Cow Gymnastics 题解(思维)
- CS0120 对象引用对于非静态的字段、方法或属性XX是必需的
- android 通话背景音,360 Vizza设置通话背景音的方法
- 使用IDEA 导出有依赖的jar包的具体方法