知识库

为 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. 现在我们可以通过执行以下命令为运行中的 Neo4j 进程分配特定的 CPU 核

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

    上面的例子将 Neo4j 进程限制到逻辑 ID 为 0 的 CPU 核。

参考

© . All rights reserved.