df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 296G 199G 82G 71% / tmpfs 7.8G 0 7.8G 0% /dev/shm
但是通过du -sh/* 查看7.7M /bin 138M /boot 214M /data 160K /dev 20K /dump.rdb 46M /etc 8.0K /hbr 384K /home 156K /ip.txt 681M /lib 23M /lib64 16K /lost+found 4.0K /media 242M /mnt 16K /mobile 4.0K /NULL 8.0K /opt 0 /proc 247M /root 16M /sbin 4.0K /selinux 4.0K /srv 0 /sys 148M /tmp 4.8G /usr 849M /var 68G /workspace
很明显存在差异丢失了一百多G,这是因为
通过df -h命令查看的磁盘使用情况是文件系统级别的,而通过du -sh /*命令查看的是各个目录的磁盘使用情况。这两个命令之间的不匹配可能是由于某些文件被删除或移动导致的。 举个例子,假设在你的文件系统中有一个大文件被删除了,但该文件的文件句柄仍然被某个进程占用着,那么这个文件在磁盘上的空间就会一直被占用,但是du -sh /*命令不会显示它,因为它已经不在文件系统的目录结构中了。这种情况下,df -h显示的磁盘使用情况会比du -sh /*命令显示的磁盘使用情况更大。
通过lsof命令查看占用进程,因为输出结果特别多到出到文件观看
lsof > lsof_output.txt
第四列是文件大小定位到这两行看到最后有个deleted这是已经删除但是还占用的
-
重新启动Java应用程序:如果可能的话,可以重新启动Java应用程序(
java
进程)。这将关闭现有的文件描述符,并创建一个新的catalina.out
文件,其中包含新的数据。 -
重定向输出:如果不需要
catalina.out
中的输出,您可以将标准输出和标准错误输出重定向到/dev/null
或其他文件,以阻止进一步的数据写入已删除的文件。例如,可以使用以下命令将这两个流重定向到/dev/null
:java -jar 应用程序.jar > /dev/null 2>&1 &
-
手动截断已删除的文件:如果想立即回收磁盘空间并且不希望重新启动应用程序,可以使用
truncate
命令手动截断已删除的catalina.out
文件。但要谨慎使用此方法,因为它将删除文件中的现有数据。truncate -s 0 /workspace/service_DWR/apache-tomcat-7.0.69/logs/catalina.out
df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 296G 76G 205G 27% / tmpfs 7.8G 0 7.8G 0% /dev/shm
恢复正常