too many open files

最近两天可以说与这个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去查看是什么链接了。

发表评论

电子邮件地址不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>