在我們一些用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情況,讓硬盤沒有特别的壓力,整體删除時間長達幾小時、幾天都沒有關系。
评论