2016-11-29 1 views
0

Ich verwende das offizielle Elasticsearch Docker-Bild. Da ES ein gewisses Maß an Speicher abgebildeten Regionen erfordert (wie documented), erhöhte ich es unter Verwendungelasticsearch - max_map_count vs Heap Größe

docker-machine ssh <NAME> sudo sysctl -w vm.max_map_count=262144 

Ich habe auch gelesen here, dass die zugewiesenen Speicher sollte etwa 50% des gesamten Systemspeichers sein.

Ich bin verwirrt darüber, wie diese beiden zusammen spielen. Wie wirkt sich das Zuweisen von mehr Speicherzuordnungsbereichen auf den zugewiesenen RAM aus. Ist es der Teil des RAM, oder ist es über die RAM-Zuweisung für elasticsearch genommen?

Antwort

0

Um es kurz zu sagen, der Heap wird nur von Elasticsearch verwendet und Lucene wird den Rest des Speichers verwenden, um Indexdateien direkt in den Speicher für blitzschnellen Zugriff abzubilden.

Das ist der Hauptgrund, warum die beste Vorgehensweise ist, die Hälfte des Speichers dem ES-Heap zuzuordnen, um die verbleibende Hälfte an Lucene zu übergeben. Es gibt jedoch auch eine andere Best Practice zu not allocate more than 32-ish GB of RAM auf dem ES-Heap (und manchmal ist es sogar less than 30B). Wenn Sie also eine Maschine mit 128 GB RAM haben, werden Sie zwar keine 64 GB für ES reservieren, aber trotzdem eine maximale 32-GB und Lucene wird glücklicherweise die restlichen 96 GB Speicher verschlingen, um seine Indexdateien abzubilden.

Das Einstellen der Speichereinstellungen ist ein wichtiger Mix, um ES genug Speicher (aber nicht zu viel) zu geben und sicherzustellen, dass Lucene eine Menge Spaß haben kann, indem so viel wie möglich genutzt wird.

+0

das beantwortet meine Frage nicht. Ich bin verwirrt über die Speicherorte. ES möchte, dass es mindestens 262144 ist. Was würde es bedeuten, es zu erhöhen oder zu verringern? Wie groß ist die Größe jedes Speicherbereichs? Variiert es mit dem Stößel der Maschine? –

+0

Der Standardwert von 'vm.max_map_count' ist 65536 und ES schlägt vor, stattdessen auf mindestens einen vierfachen Wert zu erhöhen (also 262144). Offensichtlich würde es Lucene ermöglichen, mehr virtuellen Speicher zu bekommen, um Index-Dateien abzubilden, und das Verringern hat den umgekehrten Effekt (erhöht die Wahrscheinlichkeit des Tauschens). Speicherabgebildete Bereiche sind nicht identisch mit physischem RAM (und daher nicht Teil davon), sie sind einfach Bereiche auf der Platte (oder alles, was mit einem Dateideskriptor referenziert werden kann), die als ** betrachtet werden, als ob sie physikalisch wären Erinnerung. Die Grundidee dahinter ist, die IO-Perf zu erhöhen. – Val

+0

Auch diese Antwort könnte auch helfen: http://StackOverflow.com/questions/38384759/vm-max-map-count-and-mmapfs/38404766#38404766 – Val