Cassandra,JNA,Docker和CAP_IPC_LOCK

xrs*_*stf 5 jna cassandra docker

我正在尝试优化我的Cassandra(3.7+)Docker容器的性能.我发现2015年的一个演示文稿(在幻灯片21中)提到我应该授予CAP_IPC_LOCK并设置ulimit memlock.

经过一番挖掘后,似乎有两个选项基本上是为了防止系统交换JVM,而现代版本的Cassandra似乎通过使用JNA来实现.

--ulimit memlock=-1:-1我的Docker容器上的设置具有这样的效果

INFO  12:42:33 JNA mlockall successful
Run Code Online (Sandbox Code Playgroud)

在启动时打印,所以我假设我已完成所有设置.

我是否仍然需要--cap-add=CAP_IPC_LOCK,如果是,我如何检测我是否正确设置?

man*_*nuj 2

让我们想一想。

在 Linux 中,进程需要CAP_IPC_LOCK功能来调用mlockall

现在 mlockAll 将所有调用进程的虚拟地址空间锁定到 RAM 中,防止该内存被分页到交换区域。因此基本上不让你交换。

安装JNA也有同样的效果。

这是来自 Datastax 文档

安装JNA可以提高Cassandra内存使用率。安装和配置时,Linux不会换出JVM,从而避免了相关的性能问题。

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

另外,如果您在日志中看到以下内容

JNA mlockall successful

这意味着 JNA 已启用。

我认为你没问题,不需要添加CAP_IPC_LOCK。