知识库

为 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 进程 ID。现在可以通过执行以下命令查看此进程的 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 内核。

参考