java.io.FileNotFoundException: Too many open files in system

mac 上的JVM 报错 java.io.FileNotFoundException: x-data/v_data.csv (Too many open files in system)

1 已经设置了系统的文件访问数量
$ sysctl kern.maxfiles
kern.maxfiles: 65536

2 需要同时读取 3000个csv文件

请问,是否需要对jvm作配置?

阅读 4.7k
3 个回答

只获取文件句柄不释放吗?

不管读取多少文件也好,完成的顺序肯定是不一样的,这当中先有一些文件被读取完成,释放文件句柄如此循环。
打个简单的比方你现在是1核的CPU那同时只有有一个线程运行。同时读取3000个文件你是有3000核的CPU吗?并且还要同时运行3000个线程么?

  1. http://mysun.iteye.com/blog/1... 看一下这篇文章, 确保参数大于你需要打开的文件数。不只要确保能够打开的文件句柄数足够大, 还要确保单进程能够打开的文件句柄数也足够大。

  2. 「同时」的定义太模糊,可以通过多线程的方式来打开多个文件操作, 但是线程数会收到你 cpu 核数的限制。就 3000 个文件来说, 不是很多, 通过线程池应该可以搞定。

运行这两个命令,把结果贴上来

ulimit -a
sysctl -a

如果是mac,那么配置方式有点不一样,参考我的这篇笔记:https://segmentfault.com/n/13...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题