我们在同一台服务器上部署了两个 ActivePivot 实例(相互化)。
服务器有 12 个逻辑核心。我们有一个用于 ActivePivot 实例 A 的 4 核许可证和一个用于 ActivePivot 实例 B 的 2 核许可证。
我们如何确定两个实例各自使用自己的内核(而不是低效地共享相同的内核)?
我们在同一台服务器上部署了两个 ActivePivot 实例(相互化)。
服务器有 12 个逻辑核心。我们有一个用于 ActivePivot 实例 A 的 4 核许可证和一个用于 ActivePivot 实例 B 的 2 核许可证。
我们如何确定两个实例各自使用自己的内核(而不是低效地共享相同的内核)?
ActivePivot 在 JVM 中运行,因此您可以通过将托管 ActivePivot 实例的 JVM 进程绑定到一组内核来实现。
所有操作系统都有将进程绑定到内核的命令,Windows 中的 /affinity ( http://blog.tune-up.com/windows-insights/assign-processor-affinity-to-improve-performance/ ) 和 Linux 中的任务集(http://www.cyberciti.biz/faq/taskset-cpu-affinity-command/)。同样,诀窍是将 JVM 进程绑定到您想要的一组内核。如果您在 Apache Tomcat 中运行 ActivePivot,则意味着使用绑定命令启动 Tomcat 本身。
但我不会费心在您的用例中强制绑定。操作系统的线程调度程序可能会很好地在两个实例之间分配线程,并防止它们隐藏在相同的物理内核上。考虑到系统的其他线程,这种调度是完全动态的。
我会考虑手动绑定的唯一情况是具有 NUMA 架构的大型服务器。因为将 JVM 隐藏到 NUMA 节点可以提高性能(请参阅NUMA 架构如何影响 ActivePivot 的性能?)。