2014-04-10 14 views

risposta

5

In produzione, se il database utilizza lo scambio si avranno prestazioni pessime. In un anello di nodi di Cassandra, è meglio avere un nodo completamente inattivo piuttosto che lasciarlo zoppicare in scambio.

Il modo più semplice per assicurarsi di non passare mai allo scambio è semplicemente disattivarlo.

2

Se non si disabilita lo spazio di scambio, quando c'è un problema di memoria esaurita (quando lo spazio degli indirizzi è esaurito da cassandra mmap) a livello di sistema operativo, il sistema operativo cercherà di prendere una fetta della JVM che a sua volta in realtà cercando di cancellarlo tramite JNI per impostazione predefinita. Ora, la tua JVM viene rallentata man mano che una porzione della sua memoria heap viene persa. Ora GC si verificherà con l'operazione di scrittura di cassandra con meno memoria heap. Ciò porta le prestazioni generali del nodo Cassandra verso il basso e gradualmente lo uccide un punto nel quale non rimane più memoria a livello di SO.

Ecco perché ti suggeriscono due cose.

  1. Pacchetto jna.jar. Quando c'è un'operazione GC per mmap di cassandra, tutto è fatto dal codice java e non dalla parte JNI che viene spedita di default in cassandra. Quindi, evita una porzione di spazio di indirizzamento che JNI tenta di memorizzare in caso di operazioni native.
  2. Disabilita lo spazio di scambio. Un nodo Cassandra a basso rendimento rallenterà tutte le operazioni alla sua estremità client. Anche la replica su questo nodo verrà rallentata e quindi la lettura/scrittura apparirà più lenta di quanto si pensi. Un nodo deve morire e ricominciare quando si verifica una tale Memoria esaurita invece di prendere una porzione di JVM che rallenta l'intero processo.
Problemi correlati