Cassandra、JNA、Docker 和 CAP_IPC_LOCK
Cassandra, JNA, Docker and CAP_IPC_LOCK
我正在尝试优化我的 Cassandra (3.7+) Docker 容器的性能。我发现 a presentation from 2015 提到(在幻灯片 21 上)我应该授予 CAP_IPC_LOCK
并设置 ulimit 内存锁。
经过一番研究,似乎有两个选项基本上可以防止系统交换 JVM,现代版本的 Cassandra 似乎可以通过使用 JNA 来实现。
在我的 Docker 容器上设置 --ulimit memlock=-1:-1
的效果是
INFO 12:42:33 JNA mlockall successful
在启动时打印出来,所以我假设我已经准备就绪。
我还需要--cap-add=CAP_IPC_LOCK
吗?如果需要,我如何检测我是否设置正确?
让我们考虑一下。
在 linux 中,进程需要 CAP_IPC_LOCK 调用 mlockall.
的能力
现在 mlockAll 将所有调用进程的虚拟地址 space 锁定到 RAM 中,防止内存被分页到交换区域。因此基本上不让你交换。
安装JNA效果相同
这是来自 Datastax 文档
Installing JNA can improve Cassandra memory usage.When installed and configured, Linux does not swap out the JVM, and thus avoids related performance issues.
http://docs.datastax.com/en/cassandra/1.2/cassandra/install/installJnaDeb.html
此外,如果您在日志中看到以下内容
JNA mlockall successful
这意味着 JNA 已启用。
我觉得你没问题,不需要添加CAP_IPC_LOCK。
我正在尝试优化我的 Cassandra (3.7+) Docker 容器的性能。我发现 a presentation from 2015 提到(在幻灯片 21 上)我应该授予 CAP_IPC_LOCK
并设置 ulimit 内存锁。
经过一番研究,似乎有两个选项基本上可以防止系统交换 JVM,现代版本的 Cassandra 似乎可以通过使用 JNA 来实现。
在我的 Docker 容器上设置 --ulimit memlock=-1:-1
的效果是
INFO 12:42:33 JNA mlockall successful
在启动时打印出来,所以我假设我已经准备就绪。
我还需要--cap-add=CAP_IPC_LOCK
吗?如果需要,我如何检测我是否设置正确?
让我们考虑一下。
在 linux 中,进程需要 CAP_IPC_LOCK 调用 mlockall.
的能力现在 mlockAll 将所有调用进程的虚拟地址 space 锁定到 RAM 中,防止内存被分页到交换区域。因此基本上不让你交换。
安装JNA效果相同
这是来自 Datastax 文档
Installing JNA can improve Cassandra memory usage.When installed and configured, Linux does not swap out the JVM, and thus avoids related performance issues.
http://docs.datastax.com/en/cassandra/1.2/cassandra/install/installJnaDeb.html
此外,如果您在日志中看到以下内容
JNA mlockall successful
这意味着 JNA 已启用。
我觉得你没问题,不需要添加CAP_IPC_LOCK。