我需要获取多个文件夹(带有子文件夹和多个文件)的大小并更新数据库,以限制用户上传到我的服务器。此过程必须在尽可能短的时间内定期完成。
我创建了一个 crontab 每 30 分钟执行一次这个过程,但如果这个时间间隔可以减少到 10 分钟或更短,那就太好了。我不知道这个过程从服务器占用了多少资源。我有一个简陋的 VPS,配有 1 GB RAM、1 个 CPU、Debian 8、Apache2 和 MariaDB。
我的问题是:如何计算这个过程的服务器资源消耗,以便估计使用哪个时间间隔?
顺便说一句,这是我用来获取文件夹(和子文件夹)大小的 PHP 函数:
function dirSize($dir) {
$dir = strval($dir);
if (!is_dir($dir)) return 0;
$cmd = popen("ls -ltrR {$dir} |awk '{print \$5}'|awk 'BEGIN{sum=0} {sum=sum+\$1} END {print sum}'", 'r');
$size = intval(fgets($cmd, 80));
pclose($cmd);
return $size;
}
谢谢!
编辑:
我收到了一个很好的建议@meuh每次上传或删除文件时更新数据库,增加或减少单个文件大小。我想知道,就资源消耗而言,这是否是更好的方法。谢谢!
答案1
你可以尝试一下du
命令:
du - 估计文件空间使用情况
例子:
$ du -d 0 -h Documents/
3.2M Documents/
该du
命令有很多选项,您甚至可以一次传递所有目录并获取磁盘使用总量(查看man du
更多信息)。
要找到所花费的时间(以实用的方式),您可以time
在其前面添加:
$ time du -d 0 -h Documents/
3.2M Documents/
real 0m0.004s
user 0m0.002s
sys 0m0.001s
该时间可能随目录中文件和文件夹的数量而变化。