python debug open_files
主要是遇到 Error 24, too many open files.
下面这种方法可以debug打开了哪些文件。
import __builtin__ openfiles = set() oldfile = __builtin__.file class newfile(oldfile): def __init__(self, *args, **kwargs): self.x = args[0] print "### OPENING %s ###" % str(self.x) oldfile.__init__(self, *args, **kwargs) openfiles.add(self) def close(self): print "### CLOSING %s ###" % str(self.x) oldfile.close(self) openfiles.remove(self) oldopen = __builtin__.open def newopen(*args): return newfile(*args, **kwargs) __builtin__.file = newfile __builtin__.open = newopen def printOpenFiles(): print "### %d OPEN FILES: [%s]" % (len(openfiles), ", ".join(f.x for f in openfiles))
可以使用 lsof -p 26530 | grep 'wav' >info.txt 查看进程26530的打开文件情况。