Il programma "du" può essere reso meno aggressivo?


21

Abbiamo un lavoro regolare che fa duriassunti di una serie di sottodirectory, selezionando i peggiori trasgressori e usando l'output per scoprire se ci sono cose che stanno rapidamente aumentando per individuare potenziali problemi. Usiamo diffcontro le istantanee per confrontarle.

Esiste una directory di livello superiore, con un numero (poche centinaia) di sottodirectory, ognuna delle quali può contenere 10 o migliaia di file ciascuna (o più).

Un " du -s" in questo contesto può essere molto aggressivo per l'IO, facendo sì che il nostro server esegua il bailing della sua cache e quindi enormi picchi di IO che sono un effetto secondario molto sgradito.

Quale strategia può essere utilizzata per ottenere gli stessi dati, senza gli effetti collaterali indesiderati?


9
In Germania, è possibile sostituirlo con "Sie".
Federico Poloni,

Risposte:


28

Dai un'occhiata ionice. Da man ionice:

Questo programma imposta o ottiene la classe di schedulazione io e la priorità per un programma. Se non viene fornito alcun argomento o solo -p, ionice interrogherà l'attuale classe di schedulazione io e la priorità per quel processo.

Per eseguire ducon la classe I / O "inattiva", che è la priorità più bassa disponibile, puoi fare qualcosa del genere:

ionice -c 3 du -s

Ciò dovrebbe impedire dudi interferire con l'I / O di altri processi. Potresti anche prendere in considerazione la possibilità di modificare il programma per ridurne la priorità della CPU, in questo modo:

renice -n 19 "$duPid"

Puoi anche fare entrambe le cose al momento dell'inizializzazione:

nice -n 19 ionice -c 3 du

5
Per rinominare un programma esistente, è necessario chiamare reniceinvece di nice. Per iniziare dusia con ionice e piacevole, è possibile concatenare entrambi i programmi: nice -n19 ionice -c3 du.
jofel,

nicestesso influenza anche la priorità dello scheduler I / O, non solo la CPU.
jordanm,

1
@jordanm Per quanto ne so (almeno in Linux), niceinfluisce solo sulla precisione della CPU (che può influire indirettamente sull'I / O, ma non dovrebbe influire sulla priorità dello scheduler I / O). Dove vedi questo comportamento? È documentato da qualche parte?
Chris Down,

@ChrisDown - Ricordo di averlo letto in Capire il kernel di Linux
jordanm,

@Jordanm Hm, ho quel libro. Ho fatto una breve occhiata e ho trovato solo pagina 263 che fornisce dettagli espliciti nice, e parla solo di quanti di tempo di base della CPU. Hai idea di dove fosse nel libro? Sarei interessato a leggere una fonte autorevole che gli Stati, esso non è menzionato in man nice, man 2 nice, man 2 setpriority, info niceo info 'nice invocation'per quanto posso dire, che è strano perché alcuni di questi andare in un bel po 'di dettagli su come le niceopere di chiamata e cosa fa.
Chris Down,

4

Se hai tonnellate di file in una singola directory, questo può essere responsabile di picchi di I / O, poiché molti file system non gestiscono bene i grandi alberi di file in una singola directory. Dividerlo in più sottodirectory può esserti di aiuto. Se hai più di 10k file in una singola directory e questo causa problemi, probabilmente dovresti dividerlo.

Per quanto riguarda il monitoraggio dell'utilizzo del disco, potresti prima dare un'occhiata df, se il valore d'uso lì non è aumentato rapidamente, allora non lo è nemmeno il sottodiretto e puoi saltare il dututto.

Un'altra alternativa potrebbe essere un sistema di quote del disco che tenga traccia continua dell'utilizzo, se il tuo filesystem lo supporta.


Il sistema è una build farm, quindi il numero di file in una dir dipende davvero dagli sviluppatori dei componenti che costruiamo. dfnon funzionerebbe del tutto - il problema è che abbiamo script di pulizia, quindi potremmo non vedere alcun cambiamento, ma abbiamo perso un avviso anticipato per un lavoro automatico che sta occupando in modo aggressivo spazio su disco. Usiamo zabbix per monitorare l'uso complessivo del disco, ma conoscere le singole directory in cui le cose vanno un po 'fuori di testa è piuttosto essenziale.
Danny Staple,

0

Inoltre ionice, puoi provare a rendere più efficienti gli accessi al disco. Questo può essere provato eseguendo

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

prima (forse anche attraverso ionice). Non funzionerà se ci sono troppi file. Quanti sono troppi dipende dalla quantità di RAM libera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.