Was macht der Sync-Befehl?

15

Ich weiß, was es tut ... Ich schätze, ich bin neugierig, warum es ein Problem in einer Anwendung behebt, die ich übernommen habe. Ich habe eine ziemlich große Tomcat-Anwendung übernommen, die als Red5-Server für eine Reihe von Flex-Clients fungiert und eine Menge Echtzeit-Interaktionsdaten verarbeitet, die schließlich auf eine Rails-API übertragen werden. Das Problem war im Laufe der Zeit stark ausgelastet, und die Antwortzeiten für diese Clients stiegen auf 3 bis 400 ms, wobei sie normalerweise <100 ms waren. Der Kunde vermutete, dass es sich um ein Speicherproblem handelte, das wir wirklich nie bestätigen konnten. Eines Tages hatte ein Staging-Server, auf dem ich einen Auslastungstest durchführte, die Annahme von Anforderungen grundsätzlich eingestellt oder war extrem langsam. Aus einer Laune heraus habe ich gesendet

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

und auf magische Weise erwachte der Server wieder zum Leben und lief mit voller Geschwindigkeit, um diese Verbindung herzustellen. War das ein Zufall oder macht dieses Verhalten Sinn und warum?

j_mcnally
quelle
4
Das sind zwei Befehle. Welcher Effekt ist Ihnen aufgefallen?
Michael Hampton
linuxtidbits.wordpress.com/2008/02/20/purge-memory hat vorgeschlagen, sie zusammen auszuführen , damit ich es nicht weiß.
j_mcnally
dies wurde weiter hier Refactoring: commandlinefu.com/commands/view/1026/...
j_mcnally
4
Es ist schwer zu sagen. Sie würden nicht erwarten, dass diese Befehle auf einem Server etwas Gutes bewirken, es sei denn, der Server ist fürchterlich falsch eingestellt. Aber ohne sorgfältigeres Studium kann dies nicht ausgeschlossen werden. Wenn es noch einmal passiert, probieren Sie einfach das syncoder nur das echo. Versuchen Sie dann herauszufinden, warum der Server in den Fällen, in denen dies behoben wurde, langsam ist (ist die CPU ausgelastet? Ist die E / A-Auslastung ausgelastet? Ist das System ausgelagert?)
David Schwartz

Antworten:

20

Jede Festplatte ist um Größenordnungen langsamer als Ihr RAM. Daher verwendet Linux jedes freie RAM, das Sie möglicherweise haben, um Dateisystemdaten zwischenzuspeichern. Dies sollte jedoch niemals zu Leistungsproblemen führen, es sei denn, auf Ihrer Festplatte liegt ein Problem vor oder die Dienste auf Ihrem Server versuchen, Daten mit einer so hohen Rate zu schreiben, dass der Server die Daten möglicherweise nicht zwischenspeichern oder abrufen kann. Dies kann auch ein Zeichen dafür sein, dass Ihre Festplatte das Ende ihrer Lebensdauer erreicht.

Jedenfalls:

  • Laufen man syncsagt dir, was die Synchronisation macht [leert die FS-Puffer]
  • Durch googeln von 'linux drop_caches' werden Sie darauf hingewiesen, dass durch das Echo der Nummer 3 alle nicht benötigten Speicherseiten aus dem Cache entfernt werden. [Dies sollte auf einem fehlerfreien System nicht erforderlich sein.]
  • command1 && command2 bricht auf 'wenn command1 erfolgreich beendet wird, führe command2 aus'
    • der Partner hierfür ist command1 || command2aka 'wenn command1 fehlschlägt, führe command2 aus'

Der Befehl, den Sie erhalten haben, ist bestenfalls eine vorübergehende Korrektur und ein Symptom für etwas anderes, das mit Ihrem System nicht in Ordnung ist. Entweder sind Ihre Festplatten am Ende ihrer Lebensdauer, oder Ihr System ist zu schwach für das, was Sie damit machen, oder beides .

Sammitch
quelle
Danke, ich bin mir nicht sicher, ich dachte, das wäre eine sehr kurzfristige Lösung. Ich schätze, ich wollte einen Einblick, warum das funktionieren könnte. Der Server ist auf EC2, also nicht sicher über die HD EOL-Idee.
j_mcnally
@j_mcnally EC2? Nun, ich kann nur raten, wie Ihre bestimmte Instanz aussieht, aber es ist wahrscheinlich eine Kombination von Faktoren wie EBS, das zu jeder Zeit superflockig ist, winzige RAM-Zuweisungen und das Fehlen einer Swap-Partition.
Sammitch
Wollen Sie damit sagen, dass die Lösung tatsächlich gültig sein kann?
j_mcnally
@j_mcnally traurig, wenn Sie nicht auf einer der zig-Dollar-pro-Monat-IO-optimierten Instanzen sind, möglicherweise ja.
Sammitch
5

AWS ist nichts für schwache Nerven, und Sie sind nur auf einen der Gründe gestoßen, warum. Die schlechte I / O-Situation bei Festplatten in AWS ist bekannt und einer der wichtigsten Faktoren, die berücksichtigt werden müssen, wenn eine Anwendung darüber erstellt wird. Es gibt festplattenoptimierte Instanzen und einige andere Tricks (wie das Erstellen eines RAID 0 aus EBS-Volumes), mit denen Sie versuchen können, die Situation zu verbessern. Stellen Sie sicher, dass Sie größere Instanzen verwenden (mindestens m1.large), um sicherzustellen, dass der Kernel Festplatten-E / A puffern kann.

Joel E Salas
quelle
ja mit m1.large. Diese Server werden für die App hochgefahren und dann Stunden später heruntergefahren. Sie sind sich also nicht sicher, wie viel Zeit Sie für die Festplatte investieren sollen. Ich schätze jeden Input und Vorschläge, die so aussehen, als ob das Update tatsächlich gültig ist, auch wenn es nicht vorzuziehen ist. Danke noch einmal.
j_mcnally