在我们一些用Drupal搭建的大数据量网站中,Boost模块产生的缓存文件数量非常多,以至于运行cron期间无法更新完毕,我们后来就采用了不自动更新缓存文件,而是人工根据需要在服务器上直接删除缓存文件的办法。
但当缓存文件数量达到数十、上百万的时候,需要很长时间删除,在这个过程中如果还有用户访问、产生新的缓存文件,将导致硬盘占用达到100%,长期这样的话,可能让服务器硬盘不堪重负、服务器出现负载上升、网站无法访问的情况。
这个问题一直困扰了我们好长时间,以前都是采取人工每次删除少量文件,逐步试着来进行,这导致要花费好些时间精力。昨天在网上查找了一些资料,然后改动了一下,做了一个批处理:
#!/bin/bash
for name in `find /mnt/gb3/will-delete -name "*" -print`
do
echo $name
rm -f $name
sleep 0.01
done
根据实际情况修改其中的路径、名称、延时,把这个命名为slowremove.sh,运行就可以了。
如果文件数量很多,开始运行find的过程可能需要等得比较长,然后就显示每个找到的文件名并删除,每个文件之间加入了0.01秒延时,循环直到全部完成。
如果希望尽快清理缓存,还可以先用mv将原来的缓存放到另外的目录中,让新缓存马上重建,然后再慢慢删除老缓存。
那个延时0.01秒是可以自己修改的,可以观察iostat情况,让硬盘没有特别的压力,整体删除时间长达几小时、几天都没有关系。
评论