测试环境在运行一段时间后出现了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)

  1. 执行命令ps -ef | grep java,查出进程id:13945。

  2. 执行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时,

  3. 执行 lsof -p <pid>,查看该进程打开的句柄
    若句柄数不正常,则根据打开的句柄检查不正常的原因,若句柄正常,则进行如下第二步。
  4. 执行 unlimit -a,查看open files(最大允许打开文件数)

too many open files解决方案相关推荐

  1. linux 错误 too many open files 解决方案

    too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用户最大允许打开文件数量 fdipzone@ubuntu:~$ ulimit ...

  2. 【git】git下拉项目Pulling is not possible because you have unmerged files解决方案

    ✨踩坑不易,还希望各位大佬支持一下\textcolor{gray}{踩坑不易,还希望各位大佬支持一下}踩坑不易,还希望各位大佬支持一下

  3. xposed报错无法下载zip,could not load available zip files解决方案

    1.科学上网就可以下载了 2.如果无法科学上网 去https://dl-xda.xposed.info/framework/下载对应版本的zip文件 然后复制到/sdcard/Android/data ...

  4. 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 ...

  5. 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 - ...

  6. ecplise 使用 git

    有的eclipse已经自带了Git了,就不用安装了.如果,想重新安装,可以先卸载GIT,卸载 不同eclipse卸载不一样: 1.在Eclipse中依次点击菜单"Help"-> ...

  7. 我可以直接从GitHub运行HTML文件,而不仅仅是查看它们的来源吗?

    本文翻译自:Can I run HTML files directly from GitHub, instead of just viewing their source? If I have a . ...

  8. 【错误记录】Kotlin 编译报错 ( Not nullable value required to call an ‘iterator()‘ method on for-loop range )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...

  9. Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法

    如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应的配置,不然工程就找不到对应的Info.p ...

最新文章

  1. 蓝桥杯-题目:猜算式
  2. python seaborn 热图_Python-Seaborn热图绘制的实现方法
  3. WMI in C#[强类型操作]
  4. string 转化 xml,并找到指定节点及节点值
  5. react+redux+node报错Tapable.plugin is deprecated. Use new API on `.h ooks` instead
  6. MYSQL集群的备份与恢复最终版本
  7. c/c++线性循环队列
  8. 淘宝大数据体系之数据采集
  9. java 毛笔字,Photoshop设计唯美大气的毛笔字
  10. 小学计算机绘图体会,辅导小学生电脑绘画的几点做法
  11. 查看linux负载的情况
  12. web安全—万能密码登录(跳过密码验证)
  13. 计算机无法检测到键盘,电脑无法识别键盘
  14. RAxML下载与使用与ML建树原理
  15. 蓝牙音箱硬件设计分享
  16. notion函数_用好这些实用模板,把 Notion 打造成全能助理
  17. 2020寒假集训排位赛 Cow Gymnastics 题解(思维)
  18. CS0120 对象引用对于非静态的字段、方法或属性XX是必需的
  19. android 通话背景音,360 Vizza设置通话背景音的方法
  20. 使用IDEA 导出有依赖的jar包的具体方法

热门文章

  1. R语言之关于保存pdf,png
  2. 冯诺依曼计算机的工作原理
  3. 49 Group Anagrams
  4. html中input输入框禁止粘贴复制等关健名写法记录
  5. 基于Html5的个性化学习系统的设计与实现
  6. 渗透笔记之火狐代理设置证书设置
  7. (附源码)spring boot校园学生兼职系统 毕业设计 742122
  8. 张勇:阿里巴巴所有产品未来将接入大模型全面改造
  9. DAG最长路(最短路)
  10. 人民日报训练word2vec实验