昨日,阿里云发来一条消息,磁盘监控报警。
开始没有在意,以为是当时请求量过高导致的,直到晚上的时候,发现站点无法打开,数据库也无法连接,查看监控信息发现系统磁盘全部满了。。
开始以为:
原因就是,当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。
尝试kill掉进程,清空/tmp目录,无解。磁盘仍然是占满的状态。
然后检查目录大小,发现我的web站点目录26G。服务器被注入文件了?
看到runtime目录,占用了26G的储存。runtime目录是thinkphp框架的缓存和日志目录。
进这个目录后,发现里面有N个日志文件,每个文件2M。
打开某个日志后查看详细信息后,里面全是数据库连接失败的错误日志,到这里已经知道是什么原因导致thinkphp5生成了这么多的日志文件了。
由于站点使用了队列来处理一些代码,为了方便,队列使用数据库作为驱动,而队列会持续查询数据库队列表,来处理任务。
而队列执行时是在cli模式下的,在thinkphp5.1文档里连接数据库一章有提到:
如果你使用的是长连接或者命令行,在超出一定时间后,数据库连接会断开,这个时候你需要开启断线重连才能确保应用不中断。
正是因为没有开始断线重连,数据库断开后但是队列一直在轮询着,才导致了框架一直生成错误日志,正好框架日志生成,默认没有自动删除日志配置,日志文件会一直累加。
接下来知道原因,解决方法就简单了。
- 框架开启数据库断线重连
- 开启日志自动清理(thinkphp V5.1.6+)
本文共 537 个字数,平均阅读时长 ≈ 2分钟
评论 (0)