获取多个文件夹的大小 - 如何计算进程的服务器资源消耗?

获取多个文件夹的大小 - 如何计算进程的服务器资源消耗?

我需要获取多个文件夹(带有子文件夹和多个文件)的大小并更新数据库,以限制用户上传到我的服务器。此过程必须在尽可能短的时间内定期完成。

我创建了一个 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

该时间可能随目录中文件和文件夹的数量而变化。

相关内容