使用任务集和 isolcpus 内核参数与 JVM 进行 CPU 预留和关联?

使用任务集和 isolcpus 内核参数与 JVM 进行 CPU 预留和关联?

我们需要 JVM 保留一定数量的 CPU。根据我的研究,我们可以taskset与内核参数一起使用isolcpus=<CPU_ID>,这样就没有其他进程使用该 CPU。

出现几个问题:

  • 该过程需要从 开始吗taskset
  • 预留是否意味着该进程只能在该 CPU 上运行,如果存在资源问题,它可以扩展到其他 CPU?

答案1

您通常用于taskset在进程启动后对其进行限制。您可以使用 来pidof java确定 Java 应用程序的 PID,然后将其传递给taskset

$ taskset -p $(pidof java) --cpu-list 0-2,5

笔记:如果您有 6 个 CPU,则 0、1、2、5 将为您的 JVM PID 分配与这些 CPU 的关联性。

请记住,关联性并不限制其他进程使用这些 CPU,taskset它更像是一种将特定进程或进程限制到一组特定 CPU 的工具,而不是限制排他性。

摘录任务集手册页

任务集用于在给定 PID 的情况下设置或检索正在运行的进程的 CPU 亲和力,或使用给定的 CPU 亲和力启动新的命令。 CPU 关联性是一种调度程序属性,它将进程“绑定”到系统上给定的一组 CPU。 Linux 调度程序将遵循给定的 CPU 关联性,并且该进程不会在任何其他 CPU 上运行。请注意,Linux 调度程序还支持自然 CPU 亲和性:出于性能原因,调度程序会尝试将进程保持在同一 CPU 上,只要可行。因此,强制特定的 CPU 关联性仅在某些应用程序中有用。

备择方案

这个自我回答的 U&L 问答题为:如何使用cgroups将除白名单之外的所有进程限制为单个CPU?涵盖如何使用 cgroup 来完成此任务的主题。

参考

相关内容