linux磁盘空间占满问题快速定位并解决

时间:2022-11-26 16:49:46

linux磁盘空间占满问题快速定位并解决
经常会遇到这样的场景:测试环境磁盘跑满了,导致系统不能正常运行!
此时就需要查看是哪个目录或者文件占用了空间。
常使用如下几个命令进行排查:df, lsof,du。

通常的解决步骤如下:
1. df -h 查看是哪个挂在目录满了,常常是根目录/占满

[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 25G 22G 54% /
tmpfs 7.8G 0 7.8G 0% /dev/shm

2. 快速定位一下应用日志大小情况
比如tomcat日志,应用系统自己的日志等。

3. 如果能直观地看到日志文件过大,则酌情进行删除。有时候删除日志文件之后再df -h查看空间依然被占满,继续排查。
lsof file_name 查看文件占用进程情况,如果删除的日志正在被某个进程占用,则必须重启或者kill掉进程。

[root@test ~]# lsof /usr/local/apache-tomcat-7.0.54/logs/catalina.out
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7053 root 1w REG 202,1 958123 1180888 /usr/local/apache-tomcat-7.0.54/logs/catalina.out
java 7053 root 2w REG 202,1 958123 1180888 /usr/local/apache-tomcat-7.0.54/logs/catalina.out

4. 如果不能直观地排除出是某个日志多大的原因,就需要看一下指定目录下的文件和子目录大小情况,使用du命令。

du -h --max-depth= path | sort -hr #查看目录大小并按照大小倒序展示
[root@test ~]# du -h --max-depth= /usr/local/ | sort -hr
.6G /usr/local/
.1G /usr/local/mysql
358M /usr/local/jdk1..0_121
......

【参考】
http://www.cnblogs.com/peida/archive/2012/12/10/2810755.html 每天一个linux命令(34):du 命令
http://blog.csdn.net/cjf_iceking/article/details/37593963 Linux中删除文件,磁盘空间未释放问题追踪
https://segmentfault.com/q/1010000003044027 linux 删除文件后,如何释放磁盘空间?