我目前正在每30分钟通过一个bash脚本(在Centos 6上)执行此命令,以删除大约1小时左右的文件。问题是find
命令正在使用我的cpu的45%所有的时间。有没有办法优化它。在任何时间点缓存大约有200万个项目
find /dev/shm/cache -type f -mmin +59 -exec rm -f {} \;
答案 0 :(得分:5)
您可以尝试使用nice
nice -n 19 find ...
另一件事,它可能不会对性能产生影响,
但要删除find
的匹配文件,
更简单的方法是-delete
而不是-exec
:
find /dev/shm/cache -type f -mmin +59 -delete
...即如果您的find
版本支持它(感谢@chepner指出)(现代版本会...)
答案 1 :(得分:2)
您的命令正在为找到的每个文件启动rm
的新调用,这可能非常昂贵。您可以使用一种替代语法,将多个参数发送到rm
,批量与操作系统允许的一样大。这是通过使用+
而不是;
find /dev/shm/cache -type f -mmin +59 -exec rm -f {} +
你也可以使用-delete
选项,就像janos的回答一样;它应该更高效,因为它根本不需要运行外部进程。我正在展示这个答案,因为它也推广到其他命令,可能没有相同的选项,例如
-exec grep foo {} +