背景
在训练中文手写文字识别的项目中发现了一个错误,在执行多线程dataload的时候出现下面这个错误
OSError: [Errno 24] Too many open files
RuntimeError: DataLoader worker (pid 15160) exited unexpectedly with exit code 1. Details are lost due to multiprocessing. Rerunning with num_workers=0 may give better error trace.
分析
一些项目经常需要进行多线程的批量扫描来采集数据,像采集数据这种功能当然是线程越多越好了,所以通常情况下我都是使用 3000 个线程进行扫描,在确定带宽充足,系统硬件配置够高的情况下依然会出现上述问题,大概率是因为系统的限制问题。
关于系统限制的查询、修改,执行
$ ulimit -n
1024
得到的结果是1024,就是说系统限制为同时打开1024个文件。
解决:
方法1:
ulimit -n 2048
这种方法是临时修改,当前有效,退出后即恢复原来的设置
方法2:
修改下面的文件,提高系统限制
sudo vim /etc/security/limits.conf
最这个文件的最后添加两行代码
* soft nofile 2048
* hard nofile 2048
nofiles后面的数字根据自己的需要进行修改即可,保存后注销重新登录就好了。