Surefire forkCount没有导致这个进程数

Alf*_*lfe 7 java maven maven-surefire-plugin

我可以将参数的值设置forkCount为任何所需的数字,比如12,并且我希望surefirebooter在运行这样的测试时有12个新的Java进程类型.但是ps表明我有时只得到12个预期的Java进程(确切地说:我很少得到它们).相反,我通常会少一些,有时甚至只有三四个.我的数百个单元测试的执行似乎也很慢.

ps在单元测试完成之前,运行进程也经常从输出中消失(我假设终止).在某些情况下,所有这些,然后执行无限期挂起.

文档对此并不太清楚,但我希望在所有单元测试完成之前始终有给定数量的进程.

也许这些surefirebooter过程遇到了一些问题并且过早终止了.但是,我没有看到任何错误消息.我应该在哪里看到它们?我可以打开一些调试日志记录吗?打开Surefire的调试模式改变了测试结果,所以我没有走很远的路径.

我在约400个班级中运行~1600个单元测试,在最好的情况下需要大约7分钟.执行时间差异很大,有时整个事情会在一个多小时后终止.

另一方面,在某些情况下,surefirebooter进程在执行完成(成功)后继续运行并对系统施加大量负载(因此它似乎忙于等待某些事情).

问题:

  • 谁能解释这些观察到的现象?
  • 任何人都可以提出建议,以便更正确地执行?(即e.surefirebooter始终具有所需的进程数.)
  • 有人可以就如何调试情况提出建议吗?查看有关surefirebooter流程发生情况的消息?(我尝试使用strace但是这也大大改变了行为,以至于呼叫不再终止.)

Iva*_*van 1

我的假设#1 可能oom_killer是罪魁祸首。#2 分叉进程会进入交换和/或花费大量时间进行垃圾收集

调试:

  1. 你在哪个平台上运行这个?
  2. 如果是 *nix 类型的问题,您能否检查一下dmesg运行/var/log/messages后有关被杀死进程的消息?
  3. 如果您有进程忙于等待,您可以尝试 a) 收集堆栈跟踪jstack(包括分叉进程和主进程) b)massive load on the system根据 cpu / 内存使用情况 / 调入/调出的内容量进行量化
  4. 如果这些都没有被证明有用,我会尝试分叉surefire ForkStarter,添加更多日志记录事件,并比较成功运行和失败运行的日志以获取更多线索。(--debug-XMaven 的参数来输出调试消息)。