Kami memiliki direktori cache Nginx (multi-GB) yang sangat besar untuk situs yang sibuk, yang terkadang perlu kami hapus sekaligus. Saya telah memecahkan ini di masa lalu dengan memindahkan folder cache ke jalur baru, membuat folder cache baru di jalur lama, dan kemudian rm -rf
memasukkan folder cache lama.
Namun belakangan ini, ketika saya perlu menghapus cache pada suatu pagi yang sibuk, I / O dari rm -rf
membuat server saya kelaparan proses akses disk, karena baik Nginx dan server yang dihadapinya bersifat membaca-intensif. Saya bisa menyaksikan rata-rata beban naik sementara CPU diam dan rm -rf
mengambil 98-99% dari Disk IO iotop
.
Saya sudah mencoba ionice -c 3
ketika memohon rm
, tetapi tampaknya tidak memiliki efek yang cukup pada perilaku yang diamati.
Apakah ada cara untuk menjinakkan rm -rf
untuk berbagi disk lebih banyak? Apakah saya perlu menggunakan teknik berbeda yang akan mengambil isyarat dari ionice
?
Memperbarui:
Sistem file yang dimaksud adalah penyimpanan instance AWS EC2 (disk utama adalah EBS). The /etc/fstab
entri terlihat seperti ini:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Jawaban:
Semua data dikumpulkan dari halaman ini. Di bawah ini adalah beberapa opsi untuk menghapus direktori file yang besar. Lihat langganan untuk rincian bagaimana ini diproduksi.
* cs1 adalah saklar konteks sukarela dan tidak sukarela
sumber
rsync
sedang berjalan sekarang. Mungkin terlalu dini untuk mengatakannya, dan ini bisa membantu saya tidak menjalankannya di tengah pagi yang sibuk, tetapi server masih responsif dan rata-rata beban dapat dikelola.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
danionice
, atau setidaknya itu tidak menghancurkan server sepertirm -rf
sebelumnya.Menghapus file hanya menjalankan operasi metadata pada sistem file, yang tidak dipengaruhi oleh ionice.
Cara paling sederhana adalah, jika Anda tidak memerlukan ruang disk sekarang, untuk melakukan
rm
selama jam-jam di luar jam sibuk.Cara yang lebih kompleks yang BISA bekerja adalah untuk menyebarkan penghapusan dari waktu ke waktu. Anda dapat mencoba sesuatu seperti yang berikut ini (perhatikan bahwa ini mengasumsikan jalur dan nama file Anda TIDAK mengandung spasi!):
Perhatikan juga bahwa Anda tidak dapat menggunakan
rm -f
dalam perintah pertama karena loop tidak akan berhenti (itu tergantung pada kode keluar kesalahanrm
ketika tidak ada argumen).Anda dapat mengubahnya dengan memodifikasi jumlah penghapusan per siklus (100 dalam contoh) dan durasi tidur. Namun itu mungkin tidak benar-benar berfungsi karena sistem file mungkin masih mengelompokkan pembaruan metadata sedemikian rupa sehingga Anda mendapat masalah dengan muatan IO Anda. Anda hanya harus mencoba.
sumber
while
Loop tampaknya melakukan trik ketikahead -n 50
. 100 masih perlahan-lahan menaikkan rata-rata beban di atas kritis, yang memberitahu saya terlalu banyak pertengkaran sumber daya sedang terjadi.Anda dapat memasangkannya dengan perintah "bagus".
ionice -c 3 nice -19 rm -rf /some/folder
Ini mengubah prioritas proses pada mesin.
sumber
nice
tampaknya memiliki efek sebanyakionice
, yaitu, tidak ada yang cukup.rm -rf
memiliki 99% aktifiotop
.