最近两天可以说与这个too many open files是较上劲了。前段时间,redis服务器出现这个错误,更改了服务器的ulimit的限制。最近go开发的API的服务器也是出现了同样的错误。整的很郁闷啊。不过总得来说,还是学到了很多知识。在此做一个总结。
在linux服务器上,对于打开文件的描述符是有限制的。默认的1024。可以查看ulimit的设置。ulimit的讲述在网上很多了。可以网上查一下。
不过,当一个程序,在较短的时间内,出现了大量的打开文件描述符的操作还是很值得研究的。下面说说如何去查看这些描述符。
在linux上,有一个proc的目录。这下面记录了大量的进程id。找到你程序的pid。然后在shell输入下面的命令
cd /proc/pid/fd
在每个进程下有很多内容。而文件打开的描述符都存放在fd下面。进入到fd目录后可以 ls -la看一下。就发现了这些打开的是哪些内容了。例如,我的程序是存在大量的socket的连接。那么就可以根据这些socket的id去查看是什么链接了。