go连接mysql遇到dial tcp xxxx:1111: socket: too many open files和 写日志遇到Fail to OpenFile :open xxx

这是由于文件打开太多,导致的问题

1、dial tcp xxxxip:1111: socket: too many open files

2、2021/08/27 15:12:46 Fail to OpenFile :open /Users/twj/Documents/go_www/wwwlogs/more_go_script/log20210827.log: too many open files

先查看pid,mac需要去活动监视器,linux需要以下命令

netstart -tlunp | grep 你的go启动的端口

mac

通过这个命令去查看文件打开数量,mac和linux一样

lsof -p 你的进程pid|wc -l
ulimit -n 查看你的系统当前支持同时打开文件数量

我这里是256个,超过数量的话就会挂掉程序。并抛出异常:

下面我们来看看代码

请求写日志

写日志的前提,需要打开这个日志文件

打开这个日志文件,因为每次打开都没有close

这个F参数是一个全局变量的

如果我每次运行程序都打开一次文件,就太浪费资源并且打开次数多了,就会崩溃了程序,这时候我只要判断这个F不是nil才去打开文件,就可以了。

先判断初次启动项目时候 -> 创建今天的日志并打开返回

判断今天的日期日志文件不存在 -> 关闭昨天打开的日志 -> 创建今天的日志并打开返回

看,这样他就不会像刚才那样,打开那么多文件数了,就不会报刚才哪些错误了

总结就是,是你打开的文件太多而导致的。可以试试查看当前pid打开的文件有多少了然后再调整。只要打开的文件释放了或者打开的文件不要那么多,即使你初次打开一次就可以,后面如果第二天了,就关闭前一天的日志。  然后创建并且开启今天的日志就好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值