Come posso ridurre l'utilizzo delle risorse quando copio un file di grandi dimensioni?


8

Devo spostare un file di grandi dimensioni (tabella MySQL corrotta ~ 40 GB) su un server separato per ripararlo. (Quando ho provato a riparare sul mio server di produzione, ha rapidamente ucciso il server).

Per fare ciò, desidero sincronizzare i file .frm, .MYI e .MYD dal mio server di produzione a un server cloud.

Sto copiando i file da / var / lib / mysql / {database} / a / home / {myuser} in modo da non dover abilitare l'accesso root per il comando rsync ed essere sicuro al 100% che il file del database non sia in uso (non dovrebbe essere scritto o letto da, ma ovviamente non voglio chiudere il mio database di produzione per essere sicuro).

Il primo file che ho provato a copiare era di circa 10 GB. Sto trasferendo da una parte del mio server di produzione all'altra, cioè allo stesso array di dischi.

Sfortunatamente il comando di copia "cp nomefilenomefile" ha richiesto così tante risorse da arrestare il server.

Come posso usare meno risorse quando copio il file in un'altra directory? (Non importa davvero quanto tempo ci vuole).

Supponendo che riesco a farlo, quale utilizzo delle risorse posso aspettarmi quando risincronizzo il file sul cloud?

Qualcuno può suggerire un modo migliore per farlo? Sto esaurendo rapidamente lo spazio su disco, quindi è necessario riparare e archiviare questa tabella al più presto.

Risposte:


5

Hai provato con il nice -n10prefisso al comando?

10è il valore predefinito. L'intervallo va da -20(priorità massima) a 19(minima).


@Jonathan La mia comprensione è che ciò limiterà solo l'utilizzo della CPU, non l'I / O su disco e RAM: linux.com/archive/feed/58638
Jon M

Sì, ma è un inizio, in termini di riduzione di uno dei colli di bottiglia: potrebbe essere sufficiente per fermare la macchina.
Jonathan Ross,

Grazie @Jonathan Ross, secondo questo: linux.die.net/man/1/ionice "I programmi ereditano la piacevole impostazione della CPU per le priorità di io", quindi potrebbe funzionare, ma sto cercando una combinazione di "bello" e "ionice"
Jon M

Pensare bene. Ho sempre iniziato con nicel'abitudine per lo più. iotopè anche tuo amico.
Jonathan Ross,

3
Il comando finale che ho eseguito è stato nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/Questo ha aumentato il carico sul mio server, rallentandolo un po ', ma il sito Web è stato disponibile per la durata del trasferimento
Jon M

10

Due scelte oltre alla limitazione della larghezza di banda rsync:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionicesi interfaccia con lo scheduler I / O. bufferè un buffer circolare pensato per aiutare i dispositivi a caratteri ad essere più efficienti, ma -u 150metterà in pausa 150 microsecondi tra le scritture che, secondo il manuale, potrebbero essere sufficienti a dare spazio a un disco per respirare.

Entrambi ionicee buffersono disponibili in una build Ubuntu di serie. iotopè utile se ti capita di avere CONFIG_TASK_DELAY_ACCT configurato nel tuo kernel, ma la mia casella Ubuntu non ha fortemente limitato l'usabilità del comando. So già quale comando sta affogando il mio disco rigido, voglio solo dargli un po 'di respiro.

Inoltre, mentre la copia è in corso, osserva l'output di iostat -x 1(di solito nel pacchetto sysstat) e verifica che il campo% occupato per il dispositivo sia pari o inferiore al 90% durante la copia. Se è al 99-100%, stai morendo di fame altri processi per l'I / O.


Grazie per la tua risposta @zerolagtime Ho finito per usare un comando ionice simile ma ho contrassegnato la risposta precedente come corretta
Jon M

ionice -c 3 -p $pidUnisonsta lavorando all'unisono su HDD esterno, grazie !!
Aquarius Power il

6

usa rsync con l'opzione --bwlimit = KBPS (limita la larghezza di banda I / O; KByte al secondo). giocare con un file più piccolo e cercare di trovare un mix ottimale tra velocità di trasferimento e utilizzo del sistema. Monitor nella seconda shell con "vmstat 1"


Cercherò sicuramente questo per limitare le risorse del comando RSYNC, ma al momento sto solo cercando di copiare un file in un'altra posizione sul mio server tramite il comando "cp".
Jon M,

puoi anche usare rsync per copiare il file local e limitare la larghezza di banda con l'opzione --bwlimit.
shakalandy,

rsynccopierà i file localmente. Pensa rsync --bwlimit=28000 foo.frm /bar/foo.frme poi guardalo con iostat. Non sono sicuro del perché vmstatti direi se stavi saturando un disco. Cerca% occupato iostat.
zerolagtime,

bene, vmstat mostra il tuo IO su dispositivi a blocchi. Inoltre puoi vedere qualsiasi altra cosa importante per l'uso della macchina (CPU, processi utente, CPU aspetta, scambia, ...)
shakalandy

0

Un'alternativa è:

scp -l ${KBPS} ${src} ${dest}

Ma non credo che funzionerà se $ {src} è un file in crescita ... puoi suggerire un modo per copiare e aspettare che la fonte sia chiusa ...

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.