Tenemos un directorio de caché Nginx muy grande (multi-GB) para un sitio ocupado, que ocasionalmente necesitamos borrar de una vez. He resuelto esto en el pasado moviendo la carpeta de caché a una nueva ruta, creando una nueva carpeta de caché en la ruta anterior y luego rm -rf
agregando la carpeta de caché anterior.
Últimamente, sin embargo, cuando necesito borrar el caché en una mañana ocupada, la E / S rm -rf
está privando a los procesos de acceso al disco de mi servidor, ya que tanto Nginx como el servidor al que se dirige son de lectura intensiva. Puedo ver el aumento promedio de carga mientras las CPU permanecen inactivas y rm -rf
ocupan el 98-99% del disco IO iotop
.
Lo he intentado ionice -c 3
al invocar rm
, pero parece no tener un efecto apreciable en el comportamiento observado.
¿Hay alguna manera de domesticar rm -rf
para compartir más el disco? ¿Necesito usar una técnica diferente que tome sus señales ionice
?
Actualizar:
El sistema de archivos en cuestión es un almacén de instancias de AWS EC2 (el disco primario es EBS). La /etc/fstab
entrada se ve así:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Respuestas:
Todos los datos recopilados de esta página. A continuación hay algunas opciones para eliminar un gran directorio de archivos. Echa un vistazo a la escritura para los detalles de cómo se produjo esto.
* cs1 es el contexto cambia de forma voluntaria e involuntaria
fuente
rsync
está funcionando ahora mismo. Tal vez sea demasiado pronto para saberlo, y podría ser útil que no lo esté ejecutando en medio de una mañana ocupada, pero el servidor todavía responde y el promedio de carga es manejable.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
yionice
, o al menos no destruyó el servidor al igual querm -rf
lo hizo.La eliminación de archivos solo realiza operaciones de metadatos en el sistema de archivos, que no están influenciados por ionice.
La forma más sencilla sería, si no necesita el espacio en disco en este momento, realizarlo
rm
durante las horas de menor actividad.La forma más compleja en que PODRÍA funcionar es distribuir las eliminaciones a lo largo del tiempo. Puede probar algo como lo siguiente (tenga en cuenta que asume que sus rutas y nombres de archivo NO contienen espacios):
También tenga en cuenta que no puede usar
rm -f
el primer comando porque entonces el ciclo no se detendría (depende del código de salida de error derm
cuando no hay argumento).Puede modificarlo modificando el número de eliminaciones por ciclo (100 en el ejemplo) y la duración del sueño. Sin embargo, es posible que realmente no funcione, ya que el sistema de archivos aún puede agrupar las actualizaciones de metadatos de manera que tenga problemas con su carga de E / S. Sólo tienes que intentarlo.
fuente
while
bucle parece hacer el truco cuandohead -n 50
. 100 seguía aumentando lentamente el promedio de carga por encima de lo crítico, lo que me dice que estaba sucediendo demasiada contención de recursos.Puede emparejarlo con el comando "agradable".
ionice -c 3 nice -19 rm -rf /some/folder
Esto cambia la prioridad del proceso en la máquina.
fuente
nice
parece tener tanto efecto comoionice
, es decir, nada apreciable.rm -rf
tenía el 99% encendidoiotop
.