
하나의 Java 애플리케이션으로 Tomcat을 실행하는 서버의 디스크 공간이 부족합니다. 이 머신에는 데이터베이스가 없습니다.
커널: Linux 3.10.0-514.26.2.el7.x86_64와 함께 CentOS Linux 7(코어)을 사용하고 있습니다.
내 디스크 공간 상황은 다음과 같습니다.
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
사용된 공간을 포함하는 디렉토리 상단에 파일 시스템을 마운트했을 가능성이 있습니다. IE /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/*
거대한 폴더 목록을 가져오십시오. 항상 가장 큰 파일이 문제의 원인은 아니지만 수천 개의 작은 파일이 문제의 원인일 수 있습니다.