问题描述

在pytorch环境下频繁test读取文件,出现Too many open files的error,hin难受。

解决方法一

*    soft nofile 64000
*    hard nofile 64000
root soft nofile 64000
root hard nofile 64000

*表示所有用户,root用户需要特地写出来,或者换成你自己的root用户名,比如我的是erestu

*    soft nofile 64000
*    hard nofile 64000
erestu soft nofile 64000
erestu hard nofile 64000

验证

$ ulimit -n
64000
$ ulimit -Hn
64000
$ ulimit -Sn
64000

解决方法二

    def readFile(self,fileName):
        fp = open(fileName,'rb')
        pic = Image.open(fp)
        pic_array = np.array(pic)  #  Convert to numpy array
        fp.close()
        pic = Image.fromarray(pic_array) # convert to Image type
        return pic

中间需要添加读取图片为二维数组再转换成图片的过程,否则会报错,因为图片指针还是指向原先打开的文件,在close之后不能对Image对象进行操作,所以需要clone一份出来,即pic = Image.fromarray(pic_array)

解决方法三

  • 查看项目是否引用了visdom库(python),可能是由于图片长期显示,没有关闭,导致socket链接仅打开,没有关闭

  • 将所有有关visdom的代码注释掉,即可。(亲测有效)

  • debug相关命令行

    • 查看gpu使用情况,在下方可见pid,nvidia-smi
    • 查看某进程打开的文件数(socket文件描述符) ls /proc/PID/fd | \wc -l
    • 查看某进程打开的文件 ll /proc/PID/fd
    • 动态查看log文件,可用于查看nohup产生的log文件 tailf xxx.txt,关闭为ctrl+c