jcstress:Java并发压力测试工具


Java 并发压力 (jcstress) 是实验性工具和一套测试,用于帮助研究 JVM、类库和硬件中并发支持的正确性。

为了理解 jcstress 测试并编写自己的测试,完成 jcstress-sample可能会很有用。这个样本源码分为三组:

  • APISample:解释 jcstress API;
  • JMMSample:解释 Java 内存模型的基础知识;
  • ConcurrencySample:展示了标准库有趣的并发行为。
  • 有关运行说明,请参阅测试注释。大多数测试可以这样运行:

 $ mvn clean verify -pl jcstress-samples -am
 $ java -jar jcstress-samples/target/jcstress.jar -t <test-name>


原理解释
测试安排为几个线程同时执行测试,有时会在共享状态上交会。每次运行都会生成多个状态对象。然后,线程会更改或观察该状态对象。测试线束收集观察到的状态的统计数据。在很多情况下,这足以捕捉到并发代码的重排序或违反契约的情况。

控制台输出可用于跟踪进度和调试。普通用户应使用生成的 HTML 报告,其中包含对结果的完整解释。

大多数测试都是概率测试,需要大量时间才能捕获所有情况。强烈建议延长测试运行时间,以获得可靠的结果。由于测试是有时间限制的,机器的 CPU 速度越快,jcstress 收集的样本就越多。在 harness 收集的样本数量和套件运行时间之间需要权衡。有几种预设模式可以设置合理的测试持续时间,请参见 -m。许多 CI 使用 -m quick 运行 jcstress,以加快周转。

测试失败并不立即意味着执行错误。通常的疑点是测试基础设施的错误、测试分级错误、硬件错误或其他问题。请分享您的结果并进行讨论,我们会找出问题所在。请先在相关邮件列表中讨论结果。

详细点击标题