为 Neo4j 进程分配或限制 CPU 核心
操作系统在多核处理器上运行性能关键的应用程序时,会使用所谓的 “处理器亲和性” 或 “CPU 绑定”。该功能将运行中的进程“绑定”到特定的 CPU 核心,这在降低 CPU 缓存未命中等方面可能带来好处。同时,当多个进程通过共享内存进行通信时,将它们调度到同一 NUMA 域内的核心上,可能提升性能。
在初始化时,Neo4j 会为所有可用的 CPU 核心创建一个亲和性掩码(附件列表),即它会附着到所有可用的核心。有时可能需要在初始化或运行时对 Neo4j 进程的亲和性进行限制或指定。下面的步骤是在 Linux Redhat 6.1 和 7.6 版本上执行的。类似的步骤对其他 Linux 发行版也可能适用。
-
执行 lscpu 命令,会得到类似下方的输出
在其他信息中,我们可以看到当前在线的 CPU 列表(逗号分隔),本例为 0,1。请注意,这个数字可能是二进制、十进制或十六进制,这里是十进制。
-
获取 Neo4j 进程的 PID。现在可以通过执行以下命令查看该进程的 CPU 核心亲和性
$ taskset -p pid*
该命令输出的是十进制数,可转换为二进制。或者,也可以直接执行
taskset -cp pid获取二进制输出。上例显示亲和性掩码为 3,其二进制为 1,1,即 CPU 核心 0 和 1。这也表明默认情况下,Neo4j 进程会运行在所有可用的 CPU 核心上。 -
现在我们可以通过执行以下命令,将特定的 CPU 核心分配给正在运行的 Neo4j 进程
$ taskset -cp <desired cpu(s) comma separated list> pid*
上述示例将 Neo4j 进程限制在逻辑 ID 为 0 的 CPU 核心上。
参考文献
此页面有帮助吗?