我的一台服务器显然有一个错误的会话垃圾收集例程。结果是会话目录包含数百万个文件。删除这些将需要数周时间,但似乎会话文件夹的增长速度快于文件的删除速度。
我正在分批删除 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-blocks Used 可用 Use% Mounted on
/dev/sda3 236764896 47035860 177702004 21% /
...
/dev/sda3 236764896 47019528 177718336 21% /
尽管如此,当我列出会话文件夹时,旧会话目录的文件夹大小没有区别。就好像文件夹大小只扩展到最大值。
由于看起来情况已经解决,答案不太重要,但出于好奇,我想知道文件夹大小是如何计算的,以及为什么它没有减少。