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作配置?
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作配置?
http://mysun.iteye.com/blog/1... 看一下这篇文章, 确保参数大于你需要打开的文件数。不只要确保能够打开的文件句柄数足够大, 还要确保单进程能够打开的文件句柄数也足够大。
「同时」的定义太模糊,可以通过多线程的方式来打开多个文件操作, 但是线程数会收到你 cpu 核数的限制。就 3000 个文件来说, 不是很多, 通过线程池应该可以搞定。
运行这两个命令,把结果贴上来
ulimit -a
sysctl -a
如果是mac,那么配置方式有点不一样,参考我的这篇笔记:https://segmentfault.com/n/13...
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
2 回答5.5k 阅读
2 回答1.2k 阅读✓ 已解决
2 回答7.1k 阅读✓ 已解决
1 回答3.7k 阅读
1 回答7k 阅读
只获取文件句柄不释放吗?
不管读取多少文件也好,完成的顺序肯定是不一样的,这当中先有一些文件被读取完成,释放文件句柄如此循环。
打个简单的比方你现在是1核的
CPU
那同时只有有一个线程运行。同时读取3000个文件你是有3000核的CPU
吗?并且还要同时运行3000个线程么?