2014-04-10 6 views

Antwort

5

In der Produktion, wenn Ihre Datenbank Swap verwendet, haben Sie sehr schlechte Leistung. In einem Ring von Cassandra-Knoten ist es besser, wenn ein Knoten vollständig nach unten geht, als wenn er beim Swap mitgehen kann.

Der einfachste Weg, um sicherzustellen, dass Sie nie in Swap gehen, ist es einfach zu deaktivieren.

2

Wenn Sie den Auslagerungsspeicher nicht deaktivieren, wenn auf OS-Ebene ein Speichermangel (wenn der Adressraum von Cassandra mmap aufgebraucht ist) auftritt, versucht das Betriebssystem, ein Segment der JVM zu verwenden tatsächlich versuchen, es über JNI standardmäßig zu löschen. Jetzt wird Ihre JVM verlangsamt, da ein Teil ihres Heapspeichers verloren geht. Jetzt wird GC zusammen mit der Cassandra-Schreiboperation mit geringerem Heapspeicher ausgeführt. Dies bringt die Gesamtleistung des Cassandra-Knotens herunter und tötet sie allmählich um einen Zeitpunkt, an dem auf OS-Ebene kein Speicher mehr übrig ist.

Das ist der Grund, warum sie Ihnen zwei Dinge vorschlagen.

  1. Bündel jna.jar. Wenn es eine GC-Operation für mmap von Cassandra gibt, wird alles durch Java-Code und nicht JNI-Teil erledigt, der standardmäßig in Cassandra ausgeliefert wird. Daher wird ein Teil des Adressraums vermieden, den JNI im Fall nativer Operationen zu speichern versucht.
  2. Auslagerungsspeicher deaktivieren. Ein leistungsschwacher Cassandra-Knoten verlangsamt alle Operationen an seinem Client-Ende. Selbst die Replikation zu diesem Knoten wird verlangsamt und Sie werden lesen/schreiben langsamer erscheinen als Sie denken. Ein Knoten muss absterben und neu starten, wenn ein solcher "Out of Memory" auftritt, anstatt einen Teil der JVM zu verwenden, der den gesamten Prozess verlangsamt.