我在运行带有一个 Java 应用程序的 tomcat 的服务器上磁盘空间不足。这台机器上没有数据库。
我正在使用 CentOS Linux 7 (Core) 和内核:Linux 3.10.0-514.26.2.el7.x86_64
这是我的磁盘空间情况:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 37G 37G 86M 100% /
devtmpfs 3,9G 0 3,9G 0% /dev
tmpfs 3,9G 0 3,9G 0% /dev/shm
tmpfs 3,9G 8,6M 3,9G 1% /run
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sda1 1014M 184M 831M 19% /boot
tmpfs 782M 0 782M 0% /run/user/1000
tmpfs 782M 0 782M 0% /run/user/0
这是我能找到的最大文件的列表:
du -a /var/ | sort -n -r | head -n 30
239816 /var/
95968 /var/log
75148 /var/cache
74300 /var/cache/yum/x86_64/7
74300 /var/cache/yum/x86_64
74300 /var/cache/yum
68564 /var/lib
61472 /var/lib/rpm
55856 /var/lib/rpm/Packages
38316 /var/cache/yum/x86_64/7/updates
36604 /var/log/audit
34932 /var/cache/yum/x86_64/7/base
32608 /var/log/messages
32108 /var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
32108 /var/cache/yum/x86_64/7/updates/gen
28876 /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
28876 /var/cache/yum/x86_64/7/base/gen
23652 /var/log/messages-20180304
8200 /var/log/audit/audit.log.4
8200 /var/log/audit/audit.log.3
8200 /var/log/audit/audit.log.2
8200 /var/log/audit/audit.log.1
6916 /var/lib/yum
6200 /var/cache/yum/x86_64/7/updates/6124c600ba0c1509090cbf4b4b33e565c0bd8b9a992285c1cbc1a92815249da9-primary.sqlite.bz2
5888 /var/cache/yum/x86_64/7/base/0c34273ad0292747ee5e15c047d3e51c67ca59861a446972db45d71abacc7ad7-primary.sqlite.bz2
5812 /var/lib/yum/yumdb
3804 /var/log/audit/audit.log
2060 /var/log/anaconda
1644 /var/lib/rpm/Providename
1560 /var/lib/rpm/Basenames
并且:
du -hs /
du: cannot access ‘/proc/9446/task/9446/fd/4’: No such file or directory
du: cannot access ‘/proc/9446/task/9446/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/9446/fd/4’: No such file or directory
du: cannot access ‘/proc/9446/fdinfo/4’: No such file or directory
2,4G /
重新启动并没有显著改变这种情况(只增加了几 MB)。因此,我尝试 lsof | grep -i delet
关闭 Tomcat 可能会有所帮助,因为catalina.out
我删除的文件仍然占用空间。我停止并重新启动了 Tomcat,现在的情况是
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 37G 36G 1,8G 96% /
devtmpfs 3,9G 0 3,9G 0% /dev
tmpfs 3,9G 0 3,9G 0% /dev/shm
tmpfs 3,9G 8,6M 3,9G 1% /run
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sda1 1014M 184M 831M 19% /boot
tmpfs 782M 0 782M 0% /run/user/1000
lsof | grep -i delet
firewalld 678 root 6u REG 253,0 4096 17241411 /tmp/ffiAcnGbQ (deleted)
gmain 678 779 root 6u REG 253,0 4096 17241411 /tmp/ffiAcnGbQ (deleted)
tuned 946 root 7u REG 253,0 4096 17241409 /tmp/ffiQ3hRrZ (deleted)
gmain 946 1532 root 7u REG 253,0 4096 17241409 /tmp/ffiQ3hRrZ (deleted)
tuned 946 1536 root 7u REG 253,0 4096 17241409 /tmp/ffiQ3hRrZ (deleted)
tuned 946 1541 root 7u REG 253,0 4096 17241409 /tmp/ffiQ3hRrZ (deleted)
tuned 946 1549 root 7u REG 253,0 4096 17241409 /tmp/ffiQ3hRrZ (deleted)
为了再检查一下,我使用了 ncdu:
599,3 MiB [#### ] /opt
297,8 MiB [## ] /var
181,0 MiB [# ] /boot
68,7 MiB [ ] /tmp
55,6 MiB [ ] /root
33,7 MiB [ ] /etc
16,6 MiB [ ] /run
80,0 KiB [ ] /home
. 0,0 B [ ] /proc
0,0 B [ ] /sys
0,0 B [ ] /dev
@ 0,0 B [ ] lib64
@ 0,0 B [ ] sbin
@ 0,0 B [ ] lib
@ 0,0 B [ ] bin
e 0,0 B [ ] /srv
e 0,0 B [ ] /mnt
e 0,0 B [ ] /media
我的剩余磁盘空间在哪里?
编辑:还有一条信息
cat /proc/self/mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=3990644k,nr_inodes=997661,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_prio,net_cls 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
/dev/mapper/cl-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=36,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0
mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0
/dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
tmpfs /run/user/1000 tmpfs rw,seclabel,nosuid,nodev,relatime,size=800276k,mode=700,uid=1000,gid=1000 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
答案1
有可能您在包含已用空间的目录顶部安装了文件系统。例如 /tmp 或 /var/tmp。
您能尝试输出的结果cat /proc/self/mounts
吗?
您可以尝试在新路径中再次安装根文件系统,以使它之上没有文件系统。
$ mkdir /tmp/tmproot
$ mount /dev/mapper/cl-root /tmp/tmproot
$# Do this to find largest single directories and descend down..
$ du -h --max-depth=1 -x /tmp/tmproot | sort -h
...
$ umount /tmp/tmproot
$ rmdir /tmp/tmproot
或者,文件系统可能在某种程度上被损坏,并且已经消耗了已使用的 inode,但并未删除底层文件。不过,我不知道文件系统之间的逻辑关系。
希望在“原始”状态下安装文件系统可以揭示文件的隐藏位置。
答案2
检查丢失空间的简单方法。
- 重新启动。在 unices 上,删除的文件不会从磁盘或缓存中删除,直到它被所有进程关闭。如果您知道谁可以使用大文件 - 重新启动该进程。检查可用空间变化。
- 如果这没有帮助,请尝试
du -hs /path/*
获取大文件夹列表。最大的文件并不总是问题的根源,但几千个较小的文件可能是问题的根源。