2016-11-20 8 views
5

J'essaie d'optimiser les performances de mes conteneurs Docker Cassandra (3.7+). J'ai trouvé a presentation from 2015 qui a mentionné (sur la diapositive 21) que je devrais accorder CAP_IPC_LOCK et définir le memlock ulimit. Après un peu d'exploration, il semble que deux options sont essentiellement d'empêcher le système d'échanger la JVM, ce que les versions modernes de Cassandra semblent accomplir en utilisant JNA.Cassandra, JNA, Docker et CAP_IPC_LOCK

Réglage --ulimit memlock=-1:-1 sur mes conteneurs Docker a pour effet que

INFO 12:42:33 JNA mlockall successful 

est imprimé lors du démarrage, donc je suppose que je suis prêt et fait.

Ai-je encore besoin de --cap-add=CAP_IPC_LOCK et si oui, comment puis-je détecter si je l'ai défini correctement?

Répondre

1

Pensez-y.

Dans linux un processus a besoin du CAP_IPC_LOCK capacité d'appeler mlockall.

Maintenant, mlockAll verrouille tout l'espace d'adressage virtuel du processus appelant dans la RAM, empêchant cette mémoire d'être paginée dans la zone d'échange. Donc essentiellement ne pas vous permettre d'échanger.

L'installation de JNA a le même effet.

C'est de DataStax docs

Installation de la JNA peut améliorer la mémoire Cassandra usage.When installé et configuré, Linux n'intervertir pas la machine virtuelle Java, et évite ainsi les problèmes de performance connexes.

http://docs.datastax.com/en/cassandra/1.2/cassandra/install/installJnaDeb.html

Aussi, si vous voyez dans les journaux

JNA mlockall successful

Cela signifie que la JNA est activée.

Je pense que vous allez bien et n'avez pas besoin d'ajouter CAP_IPC_LOCK.