http: Accept error: accept tcp [::]:5678: accept4: too many open files; retrying in 1s

http://www.51ste.com/ask/answer-161.html

在/etc/security/limits.conf添加

cat > /etc/security/limits.conf <<EOF

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

EOF

然后重启


echo -n > /etc/security/limits.d/90-nproc.conf

many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

  1. 查看系统的配置 ulimit -a | grep open,发现系统的配置正常。
    在这里插入图片描述
  2. 查看程序服务的打开文件限制,cat /proc/40636/limits,发现服务的限制并没有继承系统设置的,还是系统默认的1024限制。
    在这里插入图片描述
  3. 查看程序服务打开文件数(连接数)情况,lsof -p 40636 | wc -l,发现已经超出限制,所以报错。
  4. 在这里插入图片描述
  5. 再看看程序服务打开了哪些连接,lsof -p 40636 > openfiles.log,发现很多http连接打开没有关闭,看ip是报警服务的接口,于是顺着这条线索,终于找到了原因,因为程序中读取到的配置解析时报错给报警服务,大量的报警服务连接后未关闭,才导致的too many open files,这是问题的关键,但是程序为什么没有继承系统设置的最大配置限制,还需要继续查看。
    在这里插入图片描述

系统最大打开文件描述符数:

查看

$ cat /proc/sys/fs/file-max
6553600
#3 设置
$ vim /etc/sysctl.conf
fs.file-max = 6553600


查询:

[oceanstar@192 cap]$  ulimit -n
1024
[oceanstar@192 cap]$  ulimit -Hn
4096
[oceanstar@192 cap]$ ulimit -Sn
1024

查看某进程的文件打开数
cat /proc//limits
ls -lh /proc//fd
ls -lh /proc//fd|wc -l
lsof -p 78757 | wc -l
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

调整


Linux ulimit命令用于控制shell程序的资源。

ulimit为shell内建指令,可用来控制shell执行程序的资源。

-a  显示目前资源限制的设定。
-c <core文件上限>  设定core文件的最大值,单位为区块。
-d <数据节区大小>  程序数据节区的最大值,单位为KB。
-f <文件大小>  shell所能建立的最大文件,单位为区块。
-H  设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小>  指定可使用内存的上限,单位为KB。
-n <文件数目>  指定同一时间最多可开启的文件数。
-p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。
-s <堆叠大小>  指定堆叠的上限,单位为KB。
-S  设定资源的弹性限制。
-t <CPU时间>  指定CPU使用时间的上限,单位为秒。
-u <程序数目>  用户最多可开启的程序数目。
-v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值