尽管删除文件,会话目录仍在增

时间:2013-03-06 14:47:41

标签: unix ls rm

我的一台服务器显然有一个错误的会话垃圾收集例程。结果是会话目录包含数百万个文件。删除这些将花费数周时间,但似乎会话文件夹的增长速度比删除文件的速度要快。

我正在以50000批次删除文件,这看起来非常有效 - 大约需要5分钟。

  

ls -U -1 |头-n 50000 | xargs rm -f

但是,当我进行目录列表(ls -l)时,会话目录似乎在不断增长。

  

drwx-wx-wt 2 root root 843493376 3月6日15:36会议

     

drwx-wx-wt 2 root root 843530240 3月6日15:41会议

所以我的问题是:目录是否真的在增长(尽管在同一时间段内从中删除了50000个文件)或是ls命令从另一个源输出数据?

更新

正如评论中所建议的那样,我移动了失控的会话目录。使用新的空会话目录和会话清理脚本的一些更改,现在看起来它正常工作。

删除旧的会话目录仍然是一项任务,因为我不知道目录中有多少文件,所以很难说它什么时候是空的。

我意识到删除一大堆文件会妨碍服务器的性能,因此我减少了批量大小并为其编写了一个小脚本。

#!/bin/bash

cleanSession(){
    nice -n 19 ls /var/lib/php/session_old -U -1 | head -n 1000 | xargs -I '{}' rm -f /var/lib/php/session_old/'{}'
    sleep 1
    cleanSession
}

cleanSession

运行此操作会清空1000个文件批次中的目录。使用“df。”,看起来它工作缓慢。

  

文件系统1K块使用可用使用%挂载

     

/ dev / sda3 236764896 47035860 177702004 21%/

...

  

/ dev / sda3 236764896 47019528 177718336 21%/

但是,当我列出会话文件夹时,旧会话目录的文件夹大小没有差异。就好像文件夹大小只会扩展到最大值。

由于看起来情况已经解决,答案并不那么重要,但出于好奇,我会有兴趣知道如何计算文件夹大小以及为什么它不会减少。

1 个答案:

答案 0 :(得分:0)

您可以使用“rm -rf dirName”删除该目录中的所有文件,但这会产生您已经注意到的性能影响。

因此,一旦您的目录为空,只需将其删除即可。它将使用的空间将被恢复。

您应该了解目录只是一个特殊文件。当你添加文件时,它会增长,如果删除一些文件,它们的标记将被标记为空并使用我新添加的文件,直到没有空白点。所以现在你要做的就是将所有数百万个点标记为“空”。在删除目录之前,永远不会删除它们。一旦目录为空,它对性能几乎没有影响。没有比删除单个大文件更多的影响。