记一次服务器磁盘突然爆满
记一次服务器磁盘突然爆满

记一次服务器磁盘突然爆满

轩灵
2018-11-16 / 0 评论 / 1,397 阅读 /
  • 文章转载请注明来源!
  • / 正在检测是否收录...
    温馨提示:
    本文最后更新于2019年01月14日,已超过2214天没有更新,若内容或图片失效,请留言反馈。

    昨日,阿里云发来一条消息,磁盘监控报警。


    开始没有在意,以为是当时请求量过高导致的,直到晚上的时候,发现站点无法打开,数据库也无法连接,查看监控信息发现系统磁盘全部满了。。

    开始以为:

    原因就是,当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。

    尝试kill掉进程,清空/tmp目录,无解。磁盘仍然是占满的状态。
    然后检查目录大小,发现我的web站点目录26G。服务器被注入文件了?


    看到runtime目录,占用了26G的储存。runtime目录是thinkphp框架的缓存和日志目录。
    进这个目录后,发现里面有N个日志文件,每个文件2M。
    打开某个日志后查看详细信息后,里面全是数据库连接失败的错误日志,到这里已经知道是什么原因导致thinkphp5生成了这么多的日志文件了。

    由于站点使用了队列来处理一些代码,为了方便,队列使用数据库作为驱动,而队列会持续查询数据库队列表,来处理任务。
    而队列执行时是在cli模式下的,在thinkphp5.1文档里连接数据库一章有提到:

    如果你使用的是长连接或者命令行,在超出一定时间后,数据库连接会断开,这个时候你需要开启断线重连才能确保应用不中断。

    正是因为没有开始断线重连,数据库断开后但是队列一直在轮询着,才导致了框架一直生成错误日志,正好框架日志生成,默认没有自动删除日志配置,日志文件会一直累加。

    接下来知道原因,解决方法就简单了。

    1. 框架开启数据库断线重连
    2. 开启日志自动清理(thinkphp V5.1.6+)
    本文共 537 个字数,平均阅读时长 ≈ 2分钟
    145

    海报

    点点赞赏,手留余香

    给TA打赏
    如果觉得文章对您有用,快来赞赏一个吧!
      取消
      扫码打赏
      支付金额随意哦!

      评论 (0)

      语录
      取消