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。