zoukankan      html  css  js  c++  java
  • 磁盘满了,却看不到是谁占用的

    问题发生

    线上磁盘到90%,报警了,我登陆xshell一看:

    df -h
    

    果然已经用了90%。

    但是当我想查看哪个目录占用的比较多的时候:

    du -sh *
    

    却发现加起来都不够60%。顿时间,我迷茫了。

    问题排查

    首先想到的是会不会是哪个目录我没查到,直接查到根目录:

    cd /
    du -sh *
    

    但是结果也是一样的。

    用lsof查看一下句柄的情况

    yum -y install lsof
    lsof -n / |grep deleted
    

    发现有很多文件已经删掉了,但是文件句柄没有释放,直接写到了缓冲区。

    问题解决

    解决起来比较简单,干掉重启就完事了。
    或者手动创建一下文件。

    事后分析

    问题解决了当然要分析以下产生的原因。

    事情的开端是这样,线上日志比较多,就加了定期清理,然后导致日志文件没了,但是进程还在,就都写到了缓存区。

    理论上文件的写入需要判断文件是否存在,不存在应该创建,而不是只在第一次初始化日志配置的时候判断。虽然每次判断是会消耗一点性能的。

    或者在删日志的时候添加创建文件。也可以只是清空文件,而不是删除文件。

    这样写缓存区还有一个问题,就是当缓存区写满了,程序会异常,看起来进程还在跑,但是其实已经挂了,会卡在写日志的地方。

  • 相关阅读:
    学习winform第三方界面weiFenLuo.winFormsUI.Docking.dll
    C#中MySQL数据库的备份 还原 初始化
    winform学习笔记02
    mysql与sqlserver之间的关系转换
    mysql数据库使用
    python学习--导入自己的包
    thymeleaf 拼接 超链接
    @RequestParam与@PathVariable的区别
    ifram 实现左侧菜单,右侧显示内容
    Spring 整合Shiro:记住我
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/15397025.html
Copyright © 2011-2022 走看看