原因有多种,网上有说是因为系统允许打开的默认文件数设置太小,对于网络访问,高并发访问的情况,只需修改系统参数即可解决,先查看当前的设置:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1418
virtual memory          (kbytes, -v) unlimited
可以看出,对于我的个人电脑来说“open files”的设置是256。

可通过命名-n选项进行修改

ulimit -n 4096
但该选项有个问题,就是只是临时生效,比如重启电脑后将失效,为了保证始终有效,有的linux系统通过修改limits.conf文件设置:

* soft nofile 65535
* hard nofile 65535

通过修改/etc/security/limits.conf文件,把所有用户的进程打开文件上限改为65536。

其中,*表示所有用户,soft/hard表示软/硬限制,还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效。

但是有时候,不是单靠修改该参数就能解决问题,有的是因为程序的问题,比如本人曾经遇到过一个程序任务,由于连接服务器失败,有个策略设置了失败尝试,但是未对尝试次数进行限制,导致每过一秒就尝试连接socket,结果很快就导致系统挂掉,抛出此错误。其他程序只要读写文件均无法完成,比如:

java.net.SocketException: Too many open files (Accept failed)
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
    at java.net.ServerSocket.implAccept(ServerSocket.java:545)
    at java.net.ServerSocket.accept(ServerSocket.java:513)

Caused by: java.io.FileNotFoundException: /tmp/data_xxxxxx.dat (Too many open files)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)

甚至还出现过内存溢出的错误:

out of disk space or the JVM running out of memory

为了解决此类问题,如果已经定位了某个程序的问题,可通过该程序的日志进行分析,也可以通过命令查看某个线程是否打开了过多文件句柄,首先通过关键字查询线程ID,不然java线程:

ps -ef | grep java
然后执行通过线程ID查看线程所打开的文件列表:

lsof -p 1902 
 也可先统计有多少文件被打开

lsof -p 1902 | wc -l
--------------------- 
作者:古辛 
来源:CSDN 
原文:https://blog.csdn.net/weixin_42278016/article/details/82756676 
版权声明:本文为博主原创文章,转载请附上博文链接!

【JAVA】 Socket报错打开文件过多相关推荐

  1. 服务器报错打开文件过多,Linux最大打开文件数

    3.1 查看相关参数大小 查看修改前参数的大小,如下图所示: 命令如下所示:cat /proc/sys/fs/nr_open cat /proc/sys/fs/file-max ulimit -n 3 ...

  2. 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

    使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...

  3. java 无视报错编译_java 无视报错编译

    java 无视报错编译 [2021-02-06 23:28:35]  简介: 系统运维 走进Java1 centOS 6.5下编译openJDK在进行此次操作的时候,作者一共安装并配置了三次linux ...

  4. 新建eclipse的java项目报错处理

    新建eclipse的java项目报错处理:选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→双击"构建路径上的JAR和类文件夹"下面的项→选择备用JR ...

  5. 电脑配置java编译报错_java 编译错误

    我有两个简单的代码,ClickMe.java代码为:importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;publiccla ...

  6. java编译报错提示编码gbk的不可映射字符啥意思_解决java编译错误:编码GBK的不可映射字符...

    [我的Android进阶之旅]解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符 1.问题描述 最近在负责公司基础业务和移动基础设施的开发工作,正在负责L ...

  7. Java Maven项目文件红叉叉(The compiler compliance specified is 1.6 but a JRE 1.8 is used) java编译报错

    Java Maven项目文件红叉叉(The compiler compliance specified is 1.6 but a JRE 1.8 is used)java编译报错 在导入Maven项目 ...

  8. FileZilla报错严重文件传输错误 550permission denied

    FileZilla报错严重文件传输错误 550permission denied 可能原因 ​ ftp链接下没有文件操作权限. 解决方法 将ftp链接更换为SSH. ​ 或者:Ubuntu中打开Ter ...

  9. SpringBoot项目启动报错[类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。]

    Web server failed to start. Port 80 was already in use. Web server failed to start. Port 80 was alre ...

最新文章

  1. order by总结
  2. spring4声明式事务—02 xml配置方式
  3. Scrapy Architecture overview--官方文档
  4. 叫你两招编辑PDF文档的方法
  5. Linux 网卡相关操作
  6. 机架式服务器怎么和显示屏连接,图解机架式服务器的机箱和电源
  7. 利用脚本批量添加域用户账户
  8. Visual Studio 2017 15.9 版本发布:推出全新的导入 / 导出配置功能
  9. python棋盘格_干货必看 | Python的turtle库之经典棋盘格
  10. (延迟两秒,跳转相应页面)(返回到上一个页面并刷新)
  11. c语言高斯白序列x,C语言程序设计程设计指导书(晓庄).doc
  12. 数据分析不能落地?快来围观,学会数据分析应用,一起升职加薪
  13. TMS570LC43xx SylixOS can 驱动
  14. 【转载】COMSOL Multiphysics 5.3a 安装教程
  15. Typescript1-基本语法
  16. mysql的right函数_MySQL数据库中系统函数right功能简介
  17. 吴恩达:22张图全解深度学习知识!
  18. 狗狗自带餐具能有多可爱
  19. 蓝桥杯 外卖店的优先级
  20. 初尝Google Code

热门文章

  1. 计算机桌面糊了一块,电脑屏幕模糊怎么办【图解】
  2. Matlab自动驾驶工具箱使用简介
  3. 如何实现多存储文件传输,镭速提供多存储文件传输解决方案
  4. 爬虫取列表遇到的问题总结
  5. 第46篇 WebRTC及点阵笔及PHP研究(九)
  6. 问题解决:ubuntu进入桌面黑屏或只有光标
  7. Git版本控制——场景七:找bug
  8. Cocos Creator TypeScript 中使用ProtoBuf(利用工具把proto文件生成对应的js文件以及ts文件)
  9. 河南科技大学计算机学院录取名单,2021年河南科技大学高考录取结果什么时候出来及查询系统入口...
  10. 小米5黑屏开不了机,拆机风枪烤两个电源芯片成功修复,改善散热再跑分试试