Too many open files问题的处理

部分转自:Linux下Too many open files问题排查与解决 - Grey Zeng - 博客园 (cnblogs.com)

项目针对客户高并发、高可用需求,开发了一个网关服务。之所以没有使用Nginx等做负载均衡,是因为业务逻辑需要根据每个节点的任务队列情况,分配新的请求。Nginx的随机、轮询、ip_hash等策略不满足需求。

客户测试反馈,网关服务在长时间压测后不再接收新请求。查看日志发发现有大量“too many open files”的记录。

{"level":"error","timestamp":"2022-03-21T09:34:21+08:00","caller":"asrfile/upload.go:79","msg":"proxy request failed","lang type":"en-US","sample rate":16000,"ID":"en4","error":"dial tcp4 xxx.xxx.xxx.xxx:7100: socket: too many open files"}
{"level":"error","timestamp":"2022-03-21T09:34:21+08:00","caller":"asrfile/upload.go:79","msg":"proxy request failed","lang type":"en-US","sample rate":16000,"ID":"en3","error":"dial tcp4 xxx.xxx.xxx.xxx:7100: socket: too many open files"}
{"level":"error","timestamp":"2022-03-21T09:34:21+08:00","caller":"asrfile/upload.go:79","msg":"proxy request failed","lang type":"en-US","sample rate":16000,"ID":"en2","error":"dial tcp4 xxx.xxx.xxx.xxx:7100: socket: too many open files"}
{"level":"error","timestamp":"2022-03-21T09:34:21+08:00","caller":"asrfile/upload.go:79","msg":"proxy request failed","lang type":"en-US","sample rate":16000,"ID":"en1","error":"dial tcp4 xxx.xxx.xxx.xxx:7100: socket: too many open files"}

  通过以下命令查看open files设置,发现是65535,已经是最大值了。

ulimit -a

后来找到一篇文章,说supervisor托管的服务会默认配置打开的句柄数量是1024,查看 /proc/进程ID/limits 发现果然网关进程的最大句柄数是1024。

根据文章中的修改方法,设置 /etc/supervisor.conf

[supervisord]
minfds=65535                  ; min. avail startup file descriptors; default 1024

然后重启supervisor服务:systemctl restart supervisord,使配置生效。

此外,网关本身也有连接未关闭的问题。通过“lsof -p 进程ID”可查看当前的所有连接数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值