linux提示“Error: Too many open files”


更正一下,我修改完重启终端还是有这个提示,但这个最大文件打开数确实是已经显示改了,重启系统就没了,奶奶的

再补充,有群友说了这个:

那我百度”centos7 limits“,显示如下(先不看了,下班了,改天看):


如下图,老是提示这个,烦死了

百度搜索一大堆:

原因是:进程企图打开一个文件,或者叫句柄,但是现在进程打开的句柄已经达到了上限,已经无法打开新句柄了。

以下是Linux中句柄的介绍:

  • Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。

对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以下命令来查看:

ulimit –a
[root@haproxy ~]# 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) 3804
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 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) 3804
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

其中的open files一项就是默认的句柄数,此时默认的句柄数是1024

还可以设置某个进程的句柄数上限,命令是:

ulimit –a PID

使用命令修改句柄,重启会失效:

[root@haproxy ~]# ulimit -n 1024000

修改配置文件永久有效:

[root@haproxy ~]# vim /etc/security/limits.conf 
* soft nofile 2000
* hard nofile 2000

查看当前系统打开的文件数量

lsof | wc -l  
watch "lsof | wc -l" 

查看某一进程的打开文件数量

lsof -p pid | wc -l  
lsof -p 1234 | wc -l  

下面看一下如何查询系统中进程占用的句柄数

lsof -n|awk '{print $2}'|sort|uniq -c|sort-nr|more

重新登录就生效了。不需要重启。

猜你喜欢

转载自blog.csdn.net/qq_33317586/article/details/87016377