参考资料
https://help.aliyun.com/knowledge_detail/42531.html
实际案例
阿里云服务器,操作系统为centos系统,收到报警磁盘空间使用率高达80%
通过下面的命令查看磁盘使用情况
[root@app2 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 32G 6.0G 85% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 81M 3.8G 3% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
我们看到/dev/vda1
使用率占到85%,我们查看一下/
路径下的各文件的大小:
[root@app2 /]# cd /
[root@app2 /]# du -sh * | sort -h
0 ./bin
65M ./boot
4.0K ./data
0 ./dev
24M ./etc
2.5G ./home
0 ./lib
0 ./lib64
16K ./lost+found
4.0K ./media
4.0K ./mnt
8.0K ./opt
du: cannot access ‘./proc/4259/task/4259/fd/4’: No such file or directory
du: cannot access ‘./proc/4259/task/4259/fdinfo/4’: No such file or directory
du: cannot access ‘./proc/4259/fd/4’: No such file or directory
du: cannot access ‘./proc/4259/fdinfo/4’: No such file or directory
0 ./proc
131M ./root
81M ./run
0 ./sbin
4.0K ./srv
0 ./sys
5.1M ./tmp
2.5G ./usr
220M ./var
磁盘使用总共只有几G,只有求助万能的google了,http://skyhome.cn/server/341.html
原因是,nginx再运行状态下,删除nginx日志时
- 当前access.log日志正在被apache进程占用。
- 通过rm命令删除access.log,实际只删除了文件名(该日志文件应用记数不为0,因此空间不会被释放)。
- 通过rm命令删除了access.log后,apache依然写日志到access.log中,当开启apache进程时,已经通过access.log定位到该文件的inode了,就是说再写日志是不通过access.log,因此即使删除了access.log,apache依然写日志到access.log所在的inode节点,所以导致硬盘空间增加。
- 因为删除了access.log,所以我们就找不到该文件了,du也查不到,就会出现硬盘满了但看不到究竟是哪些文件占用的。
解决办法:
kill掉nginx进程,然后重新启动
$ ps aux|grep nginx
$ kill <id>
$ /home/work/nginx/sbin/nginx