Cosa fa il comando di sincronizzazione?


15

So cosa fa ... Immagino di essere curioso di sapere perché risolve un problema in un'applicazione che ho ereditato. Ho acquisito un'applicazione Tomcat abbastanza grande che funge da server Red5 per un gruppo di client flex e gestisco molti dati di interazione in tempo reale, che alla fine vengono scaricati su una rotaia API. Nel tempo il problema era molto carico e il resposo a questi client stava crescendo a 3-400 ms dove normalmente <100 ms. Il client sospettava che si trattasse di un problema di memoria che non potremmo mai confermare. Un giorno, un server di gestione temporanea, stavo eseguendo un test di carico su un arresto basico delle richieste o era estremamente lento. Per un capriccio che ho inviato

sync && echo 3 > /proc/sys/vm/drop_caches

e magicamente il server è tornato in vita e ha iniziato a funzionare a tutta velocità servendo queste connessioni. È stata una coincidenza o questo comportamento ha senso e perché?


4
Questi sono due comandi. Quale ha avuto l'effetto che hai notato?
Michael Hampton

linuxtidbits.wordpress.com/2008/02/20/purge-memory ha suggerito di eseguirli insieme, quindi non lo so.
j_mcnally,

Ciò è stato ulteriormente riscritta qui: commandlinefu.com/commands/view/1026/...
j_mcnally

4
È difficile da dire. Non ti aspetteresti che questi comandi facciano qualcosa di utile su un server a meno che non sia stato orribilmente maltrattato. Ma certamente non può essere escluso senza uno studio più attento. Se succede di nuovo, provare solo la synco solo il echo. Quindi prova a capire perché il server è lento nei casi risolti (la CPU è al massimo? L'IO è al massimo? Il sistema esegue il paging?)
David Schwartz,

Risposte:


20

Qualsiasi disco rigido ha ordini di grandezza più lenti della tua RAM, quindi Linux usa qualsiasi RAM di riserva che potresti avere in giro per memorizzare i dati del filesystem. Tuttavia, ciò non dovrebbe mai causare problemi di prestazioni a meno che non ci sia qualcosa di sbagliato nel disco rigido o i servizi sul server stiano tentando di scrivere dati a una velocità così elevata per così tanto tempo che il server non è in grado di memorizzarli nella cache o recuperarli. Potrebbe anche essere un segno che il tuo disco rigido sta raggiungendo la fine della sua durata.

Comunque:

  • in esecuzione man syncti dirà che cosa fa la sincronizzazione [svuota i buffer FS]
  • googling 'linux drop_caches' ti dirà che l'eco del numero 3 in esso rilascia tutte le pagine di memoria non necessarie dalla cache [questo non dovrebbe essere necessario su un sistema sano]
  • command1 && command2 si suddivide in "se command1 termina correttamente, quindi esegui command2"
    • il partner per questo è command1 || command2aka 'se command1 fallisce quindi esegui command2'

Il comando che ti è stato dato è una soluzione temporanea nella migliore delle ipotesi ed è sintomatico di qualcos'altro che non va nel tuo sistema. O i tuoi dischi sono alla fine del loro ciclo di vita, oppure il tuo sistema è troppo sottodimensionato per quello che stai facendo, o entrambi .


grazie, non sono sicuro, ho pensato che fosse una soluzione a brevissimo termine. Immagino di volere qualche idea sul perché questo potrebbe funzionare. Il server è su EC2, quindi non sono sicuro dell'idea EOL HD.
j_mcnally,

@j_mcnally EC2? Bene, allora posso solo immaginare come appare la tua particolare istanza, ma probabilmente è una combinazione di fattori come EBS che è sempre traballante, allocazioni di RAM minuscole e l'assenza di una partizione di swap.
Sammitch,

Quindi stai dicendo che la soluzione potrebbe effettivamente essere lol valida?
j_mcnally,

@j_mcnally, purtroppo, se non ti trovi in ​​una delle istanze ottimizzate IO di miliardi di dollari al mese, potenzialmente sì.
Sammitch,

5

AWS non è per i deboli di cuore, e hai appena incontrato uno dei motivi per cui. La scarsa situazione dell'I / O del disco su AWS è ben nota e uno dei principali fattori da considerare per chiunque costruisca un'applicazione al di sopra di essa. Esistono istanze ottimizzate per il disco e alcuni altri trucchi (come la creazione di un RAID 0 su volumi EBS) che puoi provare a migliorare. Assicurarsi di usare istanze più grandi (almeno m1.large) per assicurarsi che il kernel possa bufferizzare l'I / O del disco.


si usando m1.large. Questi server vengono avviati per l'app e poi demoliti ore dopo ... quindi non sono sicuro di un investimento di tempo, ecc., Per il disco io. apprezzo l'input di tutti e i suggerimenti sembrano che la correzione potrebbe essere valida anche se non preferibile. grazie ancora.
j_mcnally,
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.