[备忘] 磁盘空间不足分析

前提

环境说明

1.  操作系统: centos 7.2
2.  应用: docker

现象:

1.  / 磁盘不足
2.  实际上磁盘还有很多空间
3.  应用开始报错( out of space)

分析

利用 find 分析, 没有找到特殊的大文件
如:

find /apps -size +50M

利用 df 进行分析, 发现 / 已经用光

[root@hh-yun-k8s-128151 /]# df -ah
Filesystem      Size  Used Avail Use% Mounted on
rootfs             -     -     -    - /
sysfs              0     0     0    - /sys
proc               0     0     0    - /proc
devtmpfs         95G     0   95G   0% /dev
securityfs         0     0     0    - /sys/kernel/security
tmpfs            95G     0   95G   0% /dev/shm
devpts             0     0     0    - /dev/pts
tmpfs            95G  4.1G   91G   5% /run
tmpfs            95G     0   95G   0% /sys/fs/cgroup
cgroup             0     0     0    - /sys/fs/cgroup/systemd
pstore             0     0     0    - /sys/fs/pstore
cgroup             0     0     0    - /sys/fs/cgroup/cpuset
cgroup             0     0     0    - /sys/fs/cgroup/blkio
cgroup             0     0     0    - /sys/fs/cgroup/perf_event
cgroup             0     0     0    - /sys/fs/cgroup/cpu,cpuacct
cgroup             0     0     0    - /sys/fs/cgroup/hugetlb
cgroup             0     0     0    - /sys/fs/cgroup/devices
cgroup             0     0     0    - /sys/fs/cgroup/net_cls
cgroup             0     0     0    - /sys/fs/cgroup/freezer
cgroup             0     0     0    - /sys/fs/cgroup/memory
configfs           0     0     0    - /sys/kernel/config
/dev/sda2        80G   80G  286M 100% /
systemd-1          -     -     -    - /proc/sys/fs/binfmt_misc
debugfs            0     0     0    - /sys/kernel/debug
mqueue             0     0     0    - /dev/mqueue
hugetlbfs          0     0     0    - /dev/hugepages
/dev/sda1       397M  135M  263M  34% /boot
tmpfs            19G     0   19G   0% /run/user/0
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/fa7f705d-9a82-11e6-9bda-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/32d9731a-bdfc-11e6-9bda-e09796534daa/volumes/kubernetes.io~secret/default-token-dqn5d
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/c131bddd-c367-11e6-9bda-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/27779000-c5cf-11e6-9bda-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/277f9d4b-c5cf-11e6-9bda-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/72505ec1-d570-11e6-b3fc-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/b50b4c1c-d570-11e6-b3fc-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
binfmt_misc        0     0     0    - /proc/sys/fs/binfmt_misc
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/29fa587e-ecdc-11e6-ae68-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/56e3e992-ed03-11e6-ae68-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/85342d9b-ece3-11e6-ae68-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/0e10352d-edbd-11e6-ae68-e09796534daa/volumes/kubernetes.io~secret/default-token-dqn5d
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/df078f2d-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/deab6a67-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/df71a3a2-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/df165896-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/df62fbed-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/ef590f38-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-ab33i
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/ffe50f62-ef83-11e6-878c-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/b0cacb34-f1af-11e6-b535-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/025dc80b-f1b9-11e6-b535-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/de7dc25d-f272-11e6-b535-e09796534daa/volumes/kubernetes.io~secret/default-token-cuzo2
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/b07a6d58-f297-11e6-b535-e09796534daa/volumes/kubernetes.io~secret/default-token-cji2k
tmpfs            95G   12K   95G   1% /var/lib/kubelet/pods/b084b8a9-f297-11e6-b535-e09796534daa/volumes/kubernetes.io~secret/default-token-cji2k

利用 df 进行分析, 实际上 / 只占用了少量空间 (4.4G)

[root@hh-yun-k8s-128151 /]# mount /dev/sda2 /mnt
[root@hh-yun-k8s-128151 /]# du -sh /mnt/
4.4G    /mnt/

结果

分析可能性

1.  df 与 du 显示不一致
2.  常见为进程正在占用文件, 而运维人员直接删除文件, 导致文件句柄没有释放
3.  上述第二点会导致 df 读取时候也把删除的文件的空间计算进去

获取进程占用而又被删除的文件方法

lsof | grep deleted > /tmp/files

查询结果

[root@hh-yun-k8s-128151 /]# head -n 30 /tmp/files
monitor     1389                  root    5w      REG                8,2        588  404101751 /var/log/openvswitch/ovsdb-server.log-20160802 (deleted)
monitor     1389                  root    7u      REG                8,2        141    1285894 /tmp/tmpfvWpBig (deleted)
ovsdb-ser   1391                  root    7u      REG                8,2        141    1285894 /tmp/tmpfvWpBig (deleted)
monitor     1438                  root    3w      REG                8,2       3478  404108801 /var/log/openvswitch/ovs-vswitchd.log-20160802 (deleted)
docker     56894                  root   12r      REG                8,2    2000037  269953568 /var/lib/docker/containers/42a0c6add5d3b86037bef74d955fd968f4af853bf350ca1cb681094e0f60f816/42a0c6add5d3b86037bef74d955fd968f4af853bf350ca1cb681094e0f60f816-json.log.4 (deleted)
docker     56894                  root   16r      REG                8,2    2000010  342880030 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   20r      REG                8,2    2000089  343187052 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   22r      REG                8,2    2000074  343187085 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   23r      REG                8,2    2000022  342328837 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   25r      REG                8,2    2000001  346233868 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   27r      REG                8,2    2000117  345268401 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   30r      REG                8,2    2000154    1770081 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   31r      REG                8,2    2001891    1761668 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   32r      REG                8,2    2000077    1761664 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   33r      REG                8,2    2001938    1762263 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   34r      REG                8,2    2000154    3736653 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   39r      REG                8,2    2000039  345268394 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   41r      REG                8,2    2000243  404129948 /var/lib/docker/containers/a03a8e43513ea060224cf6658680157488c452d3c0096471e4a4bfd4d0e3394b/a03a8e43513ea060224cf6658680157488c452d3c0096471e4a4bfd4d0e3394b-json.log.4 (deleted)
docker     56894                  root   42r      REG                8,2    2000044  345268392 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   43r      REG                8,2    2000138  270873518 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   44r      REG                8,2    2000109  342328852 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   49r      REG                8,2    2003399    2935891 /var/lib/docker/containers/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566/7d7a7df5fbf51763352fdb928ee1a1699b3b8b4311d37e40113196c32faf7566-json.log.4 (deleted)
docker     56894                  root   51r      REG                8,2    2000258  345268396 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   57r      REG                8,2    2000024  345177666 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   58r      REG                8,2    2000141  270873521 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   59r      REG                8,2    2000243  346233846 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   60r      REG                8,2    2000103  270873517 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   65r      REG                8,2    2000009  346233853 /var/lib/docker/containers/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612/ae79f532a9fdf40f5c7c4549a2b1703382cc31f409114325e4ca4a9aa1d9d612-json.log.4 (deleted)
docker     56894                  root   66r      REG                8,2    2001743  269761873 /var/lib/docker/containers/f1cfed05a1a6051b1e97e31ed708343bcbdfc9ed0d7baa6b267e45873915b331/f1cfed05a1a6051b1e97e31ed708343bcbdfc9ed0d7baa6b267e45873915b331-json.log.4 (deleted)
docker     56894                  root   67r      REG                8,2    2000473  269761869 /var/lib/docker/containers/f1cfed05a1a6051b1e97e31ed708343bcbdfc9ed0d7baa6b267e45873915b331/f1cfed05a1a6051b1e97e31ed708343bcbdfc9ed0d7baa6b267e45873915b331-json.log.4 (deleted)

总结

根据结果, 我们得到下面分析:

1. 当需要清除日志时候,  请使用 logrotate 等工具进行日志截断
2.  如果真的怕麻烦,  那么建议使用  cat /dev/null > file.log 的方法进行文件截断 (但文件多过也会占用 inode 空间,  可以利用  df -Th 方法查询 )
3.  建议使用标准日志格式, 利用 logstash 等工具进行远程备份与日志分析,  避免类似麻烦
4.  对于 docker 自身也具有 LogConfig 参数可以对日志进行回滚截断等控制
5.  由于容器的异常,  导致 k8s 回收容器, 而残留的线程会持续对容器 log 进行访问, 导致空间会越来越小,  这个问题无法避免,  参考下面解决方法

参考解决

参考磁盘空间

df 磁盘空间

[root@hh-yun-k8s-240006 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        80G   70G   11G  87% /

du 对应磁盘空间

[root@hh-yun-k8s-240006 ~]# mount /dev/sda2 /mnt
[root@hh-yun-k8s-240006 ~]# du -sh /mnt/
57G     /mnt/
[root@hh-yun-k8s-240006 ~]# umount /mnt

说明: 当前磁盘实际使用 57GB, 但包含了进程对文件句柄没有释放的计算, 就变成 70GB

释放文件句柄

[root@hh-yun-k8s-240006 ~]# ls -li "/proc/`cat /var/run/docker.pid`/fd" | grep '\(deleted\)' | xargs -n 1 -d '\n' -P 8 -I [] bash -c 'find . -inum `echo "[]" | sed -e "s/^[[:space:]]*//" | cut -d " "  -f 1`  -exec ls -l {} \; -exec  truncate -s 0 {} \;' > /dev/null

查询释放后的空间

[root@hh-yun-k8s-240006 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        80G   60G   22G  80% /
时间: 2024-08-01 07:25:36

[备忘] 磁盘空间不足分析的相关文章

面向对象的软件分析设计过程备忘

面向对象的软件分析设计过程备忘 一.业务分析与需求收集 1.重点梳理主业务流程,逐步完善分支流程.整理和发现业务流程中的涉众以及他们的业务目标和系统目标,显式目标以及隐式目标: 2.整理涉众们在系统中所承担的角色以及各自的职责: 3.在流程的运转过程中,发现和查找业务实体.他们之间的关系以及关键实体的生命周期(由谁在什么场景下创建.中间状态的变化以致最后的消亡): 4.在流程的运转过程中,有哪些业务规则以及各种隐式的规则: 5.不断的提问和验证流程的正确性和完整性(即使是边界以外的流程也不要放过

mysql一些操作个人备忘(持续更新)

安装mysql数据库目录 1./usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/home/mysql/var ##指定安装后的数据目录 mysql 启动/关闭 1./usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/.my.cnf --user=mysql & #启动 2./usr/local/mysql/bin/mysqladmin --default

技术备忘3

   shell单引号与变量 [root@test] a=55 [root@test] echo $a 55 [root@test] echo '$a' $a [root@test] echo ''$a'' #注意此处是两个单引不是一个双引 55 总结: 在单引号中引用变量,需要这样来写(单引号括起来双引号内的变量.) :   '"${a}"' 原文地址 date星期求取 <span style="font-family:Microsoft YaHei">

备库报警邮件的分析案例(二)

在第一篇中分享了关于备库报警邮件的分析,发现很多问题都是一环扣一环. 起初是通过监控主库中的v$dataguard_status发现备库中可能存在一些问题,结果逐步分析,发现是由备库的crontab触发了备库的定时read-only和online状态,(即只读和应用日志,10gR2的环境),而这些关键信息都是从数据库的alert日志中发现的,但是问题还没有完,才刚刚开始,因为发现备库中竟然有ORA-1652: unable to extend temp segment by 128 in tab

如何优化Urchin配置文件数据库的磁盘空间

Urchin 的报告数据存储在各个配置文件所独有的每月数据库中(注:Urchin分析后的数据是按月归档),这些数据库一般位于 Urchin 的 data/reports 目录下.每个配置经过处理的数据库大小为原日志大小的5% 至10%. 默认情况下,Urchin 会保留每月的这些配置文件数据库,但经过长时间的数据积累数据量会变大,导致Urchin处理后的数据占用空间越来越大,并且在用户查看时也会降低Urchin的响应效率.因此,需要优化Urchin 配置文件每月数据库的磁盘存储空间. 优化 Ur

Oracle数据库如何手动恢复备忘日志

最近因为升级了Mac os x 10.10 Yosemite,突然前几天的一个晚上,开机发现就停留在开机界面了,看来BETA果然是不靠谱,然后想到自己这不前几天刚备份完吗,没事,TimeMachine是何等神器,二话不说直接恢复.但是恢复完,我后悔了,一来是忘了昨天晚上还加班呢,加班的成功保留成果所剩无几,关键我这才发现TimeMachine既然不备份虚拟机文件(虚拟机文件30G,估计直接给略过了吧),难怪每次都觉得备份那么快. 不过后悔也没用,重新搭开发环境吧.操作系统WIN7->开发工具VS

VM配置文件所在磁盘空间小于其配给内存时的错误信息

前几天在自己工作机(Win2k8 R2)上安装的VS等一些工具,机器的系统盘空间大幅减少到3G以下. 在此 机器上用Hyper-v启动MyVirtualMachine(配给内存为5120M)时,Hyper-v报错误信息: Could not initialize memory: There is not enough space on the disk. 具体如下: [Window Title] Virtual Machine Connection [Main Instruction] The

LINUX系统怎么使用命令清理磁盘空间?

  由于当初安装系统设计不合理,有些分区的过小,以及网络通讯故障等造成日志文件速度增长等其他原因都可以表现为磁盘空间满,造成无法读写磁盘,应用程序无法执行等.下面就给你支几招(以/home空间满为例). 1.定期对重要文件系统扫描,并作对比,分析那些文件经常读写 #IS-IR/home>;files.txt #diff filesold.txt files.txt 通过分析预测空间的增长情况,同时可以考虑对不经常读写文件进行压缩,以减少占用空间. 2.查看空间文件系统的inodes消耗 #df-

由于文件组 ‘DEFAULT’ 中的磁盘空间不足,无法为数据库 ‘TEMPDB’ 分配新页

  今天接到一个朋友的问题,sql server报"由于文件组 'DEFAULT' 中的磁盘空间不足,无法为数据库 'TEMPDB' 分配新页",按照错误提示应该是tempdb空间不足,让其查看tempdb对应数据库文件大小为不到4g,查看其对应文件为自增长,硬盘空间还有40g多点,那应该没有问题.后来她说该文件所处位置的盘是fat32的,那问题确定是fat32最大支持文件大小是4g.解决办法: 1.让tempdb中的文件恢复默认值,设置其最大值 1)重启sql server服务,te