当前位置:   article > 正文

java.nio.file.FileSystemException: xxx: Too many open files

java.nio.file.FileSystemException: xxx: Too many open files

一、故障说明:

Linux系统中长时间运行程序后,出现java.nio.file.FileSystemException: xxx: Too many open files错误。显示打开的文件太多了。

二、too many open files描述

这个异常通常表示你的程序打开了太多文件,超出了系统限制。这可能是因为你的程序在处理文件时未正确关闭文件流导致的

小编的问题是出在在上传图片处理的时候,处理完没有正确的释放流,所有长时间运行后,报错java.nio.file.FileSystemException: xxx: Too many open files

方式一、

以前

  1. for (MultipartFile file : files) {
  2. String fileName = file.getOriginalFilename();
  3. String contentType = file.getContentType();
  4. if(!FileTypeConstants.allowFileTypeList.contains(contentType)) continue;
  5. try {
  6. File dest = new File(filePath + subPath + File.separator + currentDate.getTime() + "_" + fileName);
  7. InputStream inputStream = file.getInputStream();
  8. if(contentType.startsWith("image")){
  9. // 。。。省略图片处理
  10. }else{
  11. file.transferTo(dest);
  12. }
  13. result.add(new HashMap<String,Object>(){{
  14. put("url","/" + FilePathConfig.getPrePath() +"/" + dest.getParentFile().getParentFile().getName() + "/" + dest.getParentFile().getName() + "/" + dest.getName());
  15. put("attType",contentType);
  16. put("name",fileName);
  17. if(StringUtils.isNotBlank(rowId))put("rowId",Integer.valueOf(rowId));
  18. }});
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. return R.failed("上传[" + fileName + "]文件失败");
  22. }
  23. }

现在

  1. for (MultipartFile file : files) {
  2. String fileName = file.getOriginalFilename();
  3. String contentType = file.getContentType();
  4. if(!FileTypeConstants.allowFileTypeList.contains(contentType)) continue;
  5. try {
  6. File dest = new File(filePath + subPath + File.separator + currentDate.getTime() + "_" + fileName);
  7. InputStream inputStream = file.getInputStream();
  8. if(contentType.startsWith("image")){
  9. // 。。。省略图片处理
  10. }else{
  11. file.transferTo(dest);
  12. }
  13. //关闭输入流
  14. inputStream.close();
  15. result.add(new HashMap<String,Object>(){{
  16. put("url","/" + FilePathConfig.getPrePath() +"/" + dest.getParentFile().getParentFile().getName() + "/" + dest.getParentFile().getName() + "/" + dest.getName());
  17. put("attType",contentType);
  18. put("name",fileName);
  19. if(StringUtils.isNotBlank(rowId))put("rowId",Integer.valueOf(rowId));
  20. }});
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. return R.failed("上传[" + fileName + "]文件失败");
  24. }
  25. }

方式二、进程在某个时刻打开了超过系统限制的文件数量,导致报错。

如果是Linux系统可以修改/etc/security/limits.conf文件

  1. * soft memlock unlimited
  2. * hard memlock unlimited
  3. *: 表示应用到所有的用户。
  4. soft: 表示软限制,即允许用户在达到限制之前设置自己的软限制。
  5. memlock: 表示锁定内存的大小,即控制用户可以锁定的内存量。
  6. unlimited: 表示没有限制,用户可以锁定任意数量的内存

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/615383
推荐阅读
相关标签
  

闽ICP备14008679号