急需帮助:请问java.net.SocketException: Too many open files,这个异常会在什么时候扔出

mdk89 2005-06-16 02:49:01
急需帮助:
请问java.net.SocketException: Too many open files,
这个异常会在什么时候扔出,一般是什么情况引起的,应该什么解决!!!!
...全文
205 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
icewolf_li 2005-06-17
  • 打赏
  • 举报
回复
laughsmile(海边的星空) 写的很详细了.一般来说可能是你的应用存在一些漏洞,导致资源没有及时释放.
laughsmile 2005-06-16
  • 打赏
  • 举报
回复
原因:
操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候.因为为了执行每个用户的应用服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄的缺乏.
解决:
1.尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄.
2.java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行close()(例如:java.net.Socket.close())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置socket的最大打开数来控制这个问题.
3.对操作系统做相关的设置,增加最大文件句柄数量。
3.1 Linux
在Linux内核2.4.x中需要修改源代码,然后重新编译内核才生效。编辑Linux内核源代码中的 include/linux/fs.h文件,将 NR_FILE 由8192改为65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将MAX_INODE 由16384改为262144。一般情况下,系统最大打开文件数比较合理的
设置为每4M物理内存256,比如256M.可以用lsof -p <pid of process>看打开的文件句柄数
3.2 Windows
最大文件句柄是16,384,你在任务管理器的性能这一项中可以看到当前打开的句柄数.


GaryZhu 2005-06-16
  • 打赏
  • 举报
回复
http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧