Cassandra,JNA,Docker和CAP_IPC_LOCK
我试图优化我的Cassandra(3.7+)Docker容器的性能。 我发现从2015年的一个演示文稿 (在幻灯片21),我应该授予CAP_IPC_LOCK
并设置ulimit memlock。
经过一番挖掘,似乎有两个select基本上是为了防止系统交换JVM,现代版本的Cassandra似乎通过使用JNA来完成。
在我的Docker容器上设置--ulimit memlock=-1:-1
产生这样的效果
INFO 12:42:33 JNA mlockall successful
在启动时打印,所以我假设我已经完成了设置和完成。
我仍然需要--cap-add=CAP_IPC_LOCK
,如果是的话,如何检测我是否正确设置?
让我们想想这个。
在Linux中,一个进程需要CAP_IPC_LOCKfunction来调用mlockall 。
现在mlockAll将所有调用进程的虚拟地址空间locking到RAM中,防止将该内存分页到交换区域。 因此基本上不会让你交换。
安装JNA具有相同的效果。
这是来自Datastax文档
安装JNA可以提高Cassandra内存使用率。安装和configuration后,Linux不会换出JVM,从而避免了相关的性能问题。
http://docs.datastax.com/en/cassandra/1.2/cassandra/install/installJnaDeb.html
另外如果你在日志中看到下面
JNA mlockall successful
这意味着JNA已启用。
我认为你没问题,不需要添加CAP_IPC_LOCK。