golang 程序报错 panic: open config.json: too many open files

当Golang程序遇到`panic: open config.json: too many open files`错误时,这可能是由于进程打开的文件句柄超过了系统限制。检查代码确保所有打开的文件在使用后都被正确关闭。通过`ulimit -a`和`cat /proc/进程号/limits`查看系统和程序的文件限制。使用`lsof -p 进程号`来检查程序的打开文件和连接数。若程序由Supervisor管理且遇到默认限制问题,可通过修改Supervisor的`minfds`配置并重启Supervisor来解决。
摘要由CSDN通过智能技术生成

问题:程序在运行过程中报错panic

报错:
在这里插入图片描述
知识点:
too many open files(打开的文件过多)是linux系统种常见的错误,files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄,引起的原因是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数

解决:
第一反应是哪里文件句柄读取没有释放,排查代码发现每个打开的配置文件在读完之后都会defer file.Close()关闭
在这里插入图片描述

  1. 查看系统的配置 ulimit -a | grep open
  2. 查看程序服务的打开文件限制,cat /proc/40636/limits,发现服务的限制并没有继承系统设置的,还是系统默认的1024限制。(中间的40636是程序的进程号)
  3. 查看程序服务打开文件数(连接数)情况,lsof -p 40636 | wc -l (40636是程序的进程号)
  4. 程序服务打开了哪些链接 lsof -p 40636 > openfiles.log (40636是程序的进程号)
  5. 后发现我的程序是supervisorctl管理的,supervisorctl的默认minfds配置是1024,也就是打开文件限制是1024,修改后重启supervisorctl supervisorctl reload 得以解决

摘自:https://www.jianshu.com/p/e3b2a7a8d8aa?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值