我有一个问题,我的单元测试目前在我的开发机器(多核机器)上传递,但是相同的代码在预生产(单核机器)中失败。 是否有可能以某种方式限制单元测试可用的内核数量,以便在我的开发机器上获得相同的环境?不幸的是,我无法在预制机器上运行单元测试。
答案 0 :(得分:3)
有几种方法可以做到这一点。
Taskset命令将特定进程的所有线程绑定到某个核心子集。使用很简单:taskset -c 0'你的命令'
这会将每个线程绑定到第一个CPU。
因此,为了做到这一点,您需要能够通过命令行以编程方式运行单元测试。如果你使用一些构建工具,你只需在taskset之后运行coommand。例如
taskset -c 0“mvn clean compile test”
如果您通过IDE运行测试,则可以检查运行测试时打印的完整命令。在这种情况下,它看起来像
taskset -c 0“C:\ Program Files \ Java \ jdk1.8.0_73 \ bin \ java -cp classpath com.intellij.rt.execution.junit.JUnitStarter name_of_test”
可以通过编程方式使用亲和力锁将某些代码绑定到特定核心。但在那种情况下,我不确定它是否能够在代码执行期间绑定新创建的线程。我认为任务集更容易使用并完成所有工作。
检查OpenHFT/Java-Thread-Affinity,因为它是java最受欢迎的亲和力锁定工具。