opened too many files详解编程语言

opened too many files

linux把socket当做文件管理,一个socket就是一个文件描述符,同时linux对文件描述符分别在进程和系统级别进行限制,也就是说一个进程打开多少个文件是受限制的,同时操作系统中所有进程打开的文件数也受限制。
通常出现此问题是由于程序中打开了文件流或者socket,没有关闭,导致超过,进程内最大文件数限制;
使用ulimit -a 查看限制数

[root@localhost ~]# ulimit -a 
core file size          (blocks, -c) 0 
data seg size           (kbytes, -d) unlimited 
scheduling priority             (-e) 0 
file size               (blocks, -f) unlimited 
pending signals                 (-i) 30197 
max locked memory       (kbytes, -l) 64 
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 1024 //最多打开1024个文件 
pipe size            (512 bytes, -p) 8 
POSIX message queues     (bytes, -q) 819200 
real-time priority              (-r) 0 
stack size              (kbytes, -s) 8192 
cpu time               (seconds, -t) unlimited 
max user processes              (-u) 30197 
virtual memory          (kbytes, -v) unlimited 
file locks                      (-x) unlimited 

然后使用lsof -p pid 来查看进程打开的文件描述符,看看什么样的
这里写图片描述
然后使用lsof -p pid|grep keyword|wc -l 查看某类型的文件描述符一共打开多少;
基于以上3个步骤,基本可以确定是打开文件过多导致,修复办法就是找到程序中,操作文件或socket的地方,确保使用完毕后关闭流或socket

参考

IT虾米网
IT虾米网
IT虾米网

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/20263.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论