Junit 单元测试的单芯限制

Junit 单元测试的单芯限制,junit,concurrency,Junit,Concurrency,我有一个问题,我的单元测试目前在我的开发机器(多核机器)上通过,但同样的代码在预生产(单核机器)中失败。 为了在我的开发机器上获得一个平等的环境,是否有可能限制单元测试可用的内核数量?不幸的是,我无法在pre-prod机器上运行单元测试 有几种方法可以做到这一点 使用任务集命令 Taskset命令将特定进程的所有线程绑定到内核的某个子集。使用起来很简单:taskset-c0“您的命令” 这将把每个线程绑定到第一个CPU 因此,为了做到这一点,您需要能够通过命令行以编程方式运行单元测试。如果使

我有一个问题,我的单元测试目前在我的开发机器(多核机器)上通过,但同样的代码在预生产(单核机器)中失败。
为了在我的开发机器上获得一个平等的环境,是否有可能限制单元测试可用的内核数量?不幸的是,我无法在pre-prod机器上运行单元测试

有几种方法可以做到这一点

  • 使用任务集命令
Taskset命令将特定进程的所有线程绑定到内核的某个子集。使用起来很简单:taskset-c0“您的命令”

这将把每个线程绑定到第一个CPU

因此,为了做到这一点,您需要能够通过命令行以编程方式运行单元测试。如果使用某种构建工具,只需在任务集之后运行coommand。比如说

任务集-c 0“mvn干净编译测试”

如果通过IDE运行测试,则可以检查运行测试时打印的完整命令。在这种情况下,它将看起来像

taskset-c 0“c:\Program Files\Java\jdk1.8.0\U 73\bin\Java-cp classpath com.intellij.rt.execution.junit.JUnitStarter name\u of_test”

  • 使用亲缘锁
可以通过编程方式使用关联锁将某些代码绑定到特定的核心。但在这种情况下,我不确定它是否能够在代码执行期间绑定新创建的线程。我认为taskset更易于使用,并且可以完成所有工作


检查一下,因为它是最流行的java亲和锁工具。

您的测试是否显式调用并行性?更一般地说,这听起来像是在说“我的测试通过了,但应用程序失败了,所以我需要消除内核之间的差异”。为什么你确定原因不是别的?你可以从另一个线程中获得一些背景信息:基本上,我只想限制内核的数量,看看我是否能在单元测试中引发问题,并理解它在生产中失败的原因。我真的不知道问题是什么…是的,这似乎是合理的。谢谢,这帮了我正确的方向。对于osx上不支持taskset的任何人(如我),请在此处找到相应的步骤