标签:log 高级 tar reg mic mon 系统 nod comm
服务器运行一段时间后df查看磁盘剩余空间不足,通过du统计发现被几个文件占用,遂删除之。过了一段时间磁盘空间再次不足,通过du统计却找不到那么多大文件。搜索后才得知原因:文件删除后空间没有释放,du统计不到这部分文件;需要通过lsof排查,然后kill文件进程。以下记录排查处理过程:
df(Disk Free) 以磁盘分区为单位查看文件系统,获取硬盘被占用空间和剩余空间等信息。df 默认显示的文件大小单位Byte;使用命令df -h
,以KB,MB,GB为单位,提高可读性。
du(Disk Usage) 含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。
df统计出根目录占用30G,而du统计结果为11G(排除/mnt占用),大约19G的空间去哪儿了呢?
搜索 linux du df空间不一致
才得知原因:当有其他进程打开某文件时文件被删除,就会将该文件标记为deleted(类似windows下的回收站状态),并删除其目录节点。使用du查看时,因为没有该删除状态文件的节点信息,所以就不做统计,从而导致与df的结果不一致。
在linux环境下,一切皆文件。lsof(LiSt Open Files)是一个查看当前系统文件的工具。
linux里的文件被删除后,空间没有被释放是因为在Linux系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink)。然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。
lsof |grep deleted
可以查看到状态为deleted的文件,如下:// 查看状态为deleted的文件 ? lsof |grep deleted // 查看结果 COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME dbus-daem 456 dbus txt REG 253,1 441144 141672 /usr/bin/dbus-daemon (deleted) ... node 11595 11733 root txt REG 253,1 29851602 1461079 /home/elk/kibana-5.5.1-linux-x86_64/node/bin/node (deleted) node 11595 11733 root 1w REG 253,1 11374904415 1059873 /home/elk/kibana-5.5.1-linux-x86_64/nohup.out (deleted) node 11595 11733 root 2w REG 253,1 11374904415 1059873 /home/elk/kibana-5.5.1-linux-x86_64/nohup.out (deleted) async_17 24113 24210 rabbitmq 1w REG 253,1 8556707104 659069 /var/log/rabbitmq/startup_log (deleted) async_18 24113 24211 rabbitmq 1w REG 253,1 8556707104 659069 /var/log/rabbitmq/startup_log (deleted) async_19 24113 24212 rabbitmq 1w REG 253,1 8556707104 659069 /var/log/rabbitmq/startup_log (deleted) async_20 24113 24213 rabbitmq 1w REG 253,1 8556707104 659069 /var/log/rabbitmq/startup_log (deleted) ...
lsof输出各列信息的意义如下:
单位Byte
)释放文件的方法主要有两种:
我这个环境已经不需要这些文件,所以直接停掉进程,生产环境中要谨慎排查。再次查看空间,文件已释放:
标签:log 高级 tar reg mic mon 系统 nod comm
原文地址:https://www.cnblogs.com/Small-sunshine/p/11133460.html