linux系统报Too many open files的错误

发布时间 2023-10-31 14:28:43作者: 风行天下-2080

1、

https://www.cnblogs.com/zj-cloud/articles/17169769.html

一、openfile文件描述符不够

故障现象:

程序会报Too many open files的错误,是因为open files 数目不够

 

排查思路:

1、ulimit -a 或ulimit -n 查看当前最大打开的openfile数量

截图.png

 

默认是1024

修改/etc/security/limits.conf文件(自上而下匹配)

在文件末尾添加

* soft nofile 204800

* hard nofile 204800

* soft nproc 204800

* hard nproc 204800

* 代表针对所有用户

noproc 是代表最大进程数

nofile 是代表最大文件打开数

file-max是内核可分配的最大文件数,nr_open是单个进程可分配的最大文件数,所以在我们使用ulimit或limits.conf来设置时,如果要超过默认的1048576值时需要先增大nr_open值(sysctl -w fs.nr_open=100000000或者直接写入sysctl.conf文件)。

  1. 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
  2. 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
  3. nofile的soft limit不能超过其hard limit
  4. nofile的hard limit不能超过/proc/sys/fs/nr_open

二、线程数不够用

截图.png

su:resource temporarily unavailable 资源暂不可用

 

进程创建的时候存在real user和effective user两个属性,用ps命令统计的时候默认显示的是effective user的进程数,当进程的real user跟effective user不一致的时候会导致上面的命令统计的结果小于限制值。之前命令查看的是effective user,使用-U参数查real user为grid的用户

 

查看进程占用线程数

ps h -Led -o user | sort | uniq -c | sort -n

 

系统最大可打开进程数   cat /proc/sys/kernel/pid_max

临时配置 ulimit -u 8092

 永久配置需修改/etc/security/limits.d/20-nproc.conf 文件中数值

注意:

如果配置的数值大于系统最大打开进程数,需修改系统内核参数

临时配置
sysctl -w  kernel.pid_max=655351
永久配置
echo kernel.pod_max=655351 >> /etc/sysctl.conf
sysctl -p

2、