Too many open files 错误深度分析
原文
https://mp.weixin.qq.com/s/IW8i3kJSMOHu3nLNgpxwhw
0x03 它的产生原因是什么?
本质上来讲,产生这个错误的原因,就是内核为进程分配的fd不够用了。
在linux的世界里,一些皆文件,当我们做打开文件、创建socket、创建epoll实例等操作时,内核会把这些创建的对象,都封装成一个struct file实例,然后将其放到进程的已打开文件数组里,而数组的下标,就是fd,也就是我们常说的文件描述符。
这个fd会随着上述系统调用的结束,返回给用户层,用户层程序后续就可以用其他的一些系统调用,比如read/write,来操作这个fd,也就是操作这个fd对应的内核文件、socket、及epoll实例了。
这就是linux世界里的一切皆文件。
进程当前各类资源的限制值,可通过 cat /proc/pid/limits 查看
- ulimit
- 通过修改 /etc/security/limits.conf 文件的方式来设置fd资源限制值,是会永久生效的。