这是由于文件打开太多,导致的问题
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打开的文件有多少了然后再调整。只要打开的文件释放了或者打开的文件不要那么多,即使你初次打开一次就可以,后面如果第二天了,就关闭前一天的日志。 然后创建并且开启今天的日志就好。