当前位置

慢速删除大批量文件,降低服务器硬盘负载压力

James Qi 在 2012年7月18日 - 10:24 提交

  在我们一些用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情况,让硬盘没有特别的压力,整体删除时间长达几小时、几天都没有关系。

 

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。