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?
sync
oder nur dasecho
. 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?)Antworten:
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:
man sync
sagt dir, was die Synchronisation macht [leert die FS-Puffer]command1 && command2
bricht auf 'wenn command1 erfolgreich beendet wird, führe command2 aus'command1 || command2
aka '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 .
quelle
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.
quelle