知识库

为 Neo4j 进程分配或限制 CPU 核心

操作系统在多核处理器上运行性能关键的应用程序时,会使用所谓的 “处理器亲和性” 或 “CPU 绑定”。该功能将运行中的进程“绑定”到特定的 CPU 核心,这在降低 CPU 缓存未命中等方面可能带来好处。同时,当多个进程通过共享内存进行通信时,将它们调度到同一 NUMA 域内的核心上,可能提升性能。

在初始化时,Neo4j 会为所有可用的 CPU 核心创建一个亲和性掩码(附件列表),即它会附着到所有可用的核心。有时可能需要在初始化或运行时对 Neo4j 进程的亲和性进行限制或指定。下面的步骤是在 Linux Redhat 6.1 和 7.6 版本上执行的。类似的步骤对其他 Linux 发行版也可能适用。

  1. 执行 lscpu 命令,会得到类似下方的输出

    List of available CPU cores

    在其他信息中,我们可以看到当前在线的 CPU 列表(逗号分隔),本例为 0,1。请注意,这个数字可能是二进制、十进制或十六进制,这里是十进制。

  2. 获取 Neo4j 进程的 PID。现在可以通过执行以下命令查看该进程的 CPU 核心亲和性

    $ taskset -p pid*
    CPU cores affinity list for the process

    该命令输出的是十进制数,可转换为二进制。或者,也可以直接执行 taskset -cp pid 获取二进制输出。上例显示亲和性掩码为 3,其二进制为 1,1,即 CPU 核心 0 和 1。这也表明默认情况下,Neo4j 进程会运行在所有可用的 CPU 核心上。

  3. 现在我们可以通过执行以下命令,将特定的 CPU 核心分配给正在运行的 Neo4j 进程

    $ taskset -cp <desired cpu(s) comma separated list> pid*
    Updated CPU cores which the process is affiliated with

    上述示例将 Neo4j 进程限制在逻辑 ID 为 0 的 CPU 核心上。

参考文献

© . This site is unofficial and not affiliated with Neo4j, Inc.