¿Puede el programa "du" hacerse menos agresivo?

21

Tenemos un trabajo regular que hace duresúmenes de una serie de subdirectorios, selecciona a los peores delincuentes y utiliza la salida para determinar si hay cosas que están aumentando rápidamente para detectar posibles problemas. Usamos diffcontra las instantáneas para compararlas.

Hay un directorio de nivel superior, con un número (unos cientos) de subdirectorios, cada uno de los cuales puede contener 10's de miles de archivos cada uno (o más).

Un " du -s" en este contexto puede ser muy agresivo con IO, haciendo que nuestro servidor saque su caché y luego picos masivos de IO que son un efecto secundario muy desagradable.

¿Qué estrategia se puede usar para obtener los mismos datos, sin los efectos secundarios no deseados?

Danny Staple
fuente
99
En Alemania, puede reemplazarlo con "Sie".
Federico Poloni

Respuestas:

28

Echa un vistazo a ionice. De man ionice:

Este programa establece u obtiene la clase de programación io y la prioridad para un programa. Si no se proporcionan argumentos o solo -p, ionice consultará la clase de programación io actual y la prioridad para ese proceso.

Para ejecutar ducon la clase de E / S "inactiva", que es la prioridad más baja disponible, puede hacer algo como esto:

ionice -c 3 du -s

Esto debería evitar duinterferir con otras E / S del proceso. También es posible que desee considerar volver a crear el programa para reducir su prioridad de CPU, de esta manera:

renice -n 19 "$duPid"

También puede hacer ambas cosas en el momento de la inicialización:

nice -n 19 ionice -c 3 du
Chris Down
fuente
55
Para cambiar el nombre de un programa existente, debe llamar en renicelugar de nice. Para empezar ducon tanto ionice y agradable, puede encadenar dos programas: nice -n19 ionice -c3 du.
jofel
niceen sí mismo también afecta la prioridad del planificador de E / S, no solo la CPU.
jordanm
1
@jordanm Hasta donde yo sé (al menos en Linux), nicesolo afecta la simplicidad de la CPU (que puede afectar indirectamente la E / S, pero no debería afectar la prioridad del planificador de E / S). ¿Dónde ves este comportamiento? ¿Está documentado en alguna parte?
Chris Down
@ChrisDown - Recuerdo haberlo leído en Understanding the Linux Kernel
jordanm
@jordanm Hm, tengo ese libro. Lo hojeé rápidamente y solo encontré la página 263 que proporciona detalles explícitos sobre nice, y solo habla sobre cuánticos de tiempo base de CPU. ¿Tienes alguna idea de en qué parte del libro estaba? Me interesaría leer una fuente autorizada que los estados él, es que no se mencionan en man nice, man 2 nice, man 2 setpriority, info niceo info 'nice invocation'por lo que yo puedo decir, que es extraño porque algunos de estos van en un poco de detalle sobre cómo los nicetrabajos de llamadas y lo que hace
Chris Down
4

Si tiene toneladas de archivos en un solo directorio, esto puede ser responsable de los picos de E / S, ya que muchos sistemas de archivos no manejan bien los árboles de archivos grandes en un solo directorio. Dividirlo en más subdirectorios puede ayudar allí. Si tiene más de 10k archivos en un solo directorio y eso está causando problemas, probablemente debería dividirlo.

En cuanto al seguimiento del uso del disco, primero puede echar un vistazo df, si el valor de uso allí no aumentó rápidamente, los subdirectorios tampoco lo hicieron y puede omitirlo por ducompleto.

Otra alternativa puede ser un sistema de cuota de disco que mantiene un seguimiento continuo del uso, si su sistema de archivos lo admite.

Frostschutz
fuente
El sistema es una granja de compilación, por lo que la cantidad de archivos en un directorio depende realmente de los desarrolladores de los componentes que construimos. dfno funcionaría del todo: el problema es que tenemos scripts de limpieza, por lo que es posible que no veamos ningún cambio, pero hemos perdido una advertencia temprana para un trabajo automático que está ocupando agresivamente espacio en el disco. Usamos zabbix para monitorear el uso general del disco, pero conocer los directorios individuales donde las cosas se vuelven un poco locas es bastante esencial.
Danny Staple
0

Además ionice, puede intentar que los accesos al disco sean más eficientes. Esto se puede intentar ejecutando

find /du/root -printf ""
find /du/root -perm 777 -printf ""

primero (tal vez ionicetambién). No funcionará si hay demasiados archivos. Cuántos es demasiado depende de la cantidad de RAM libre.

Hauke ​​Laging
fuente