gpt4 book ai didi

java - Surefire forkCount 不会产生这个数量的进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:36 25 4
gpt4 key购买 nike

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

在单元测试完成之前,正在运行的进程也经常从 ps 输出中消失(我假设是终止)。在某些情况下,全部,执行将无限期挂起。

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

也许 surefirebooter 进程遇到了一些问题并提前终止。不过,我没有看到任何错误消息。我应该在哪里看到它们?我可以打开一些调试日志记录吗?打开 Surefire 的 Debug模式改变了测试结果,所以我没有沿着这条路走太远。

我在大约 400 个类(class)中运行大约 1600 个单元测试,在最好的情况下需要大约 7 分钟。执行时间变化很大,有时整个事情会在一个多小时后终止。

另一方面,在某些情况下,surefirebooter 进程在执行完成(成功)后继续运行并给系统带来巨大负载(因此它似乎正忙于等待某事)。

问题:

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

最佳答案

我的假设 #1 是 oom_killer可能是罪魁祸首。 #2 是 fork 进程进入交换和/或花费疯狂的时间垃圾收集东西

调试:

  1. 您在哪个平台上运行它?
  2. 如果这是 *nix 类的东西,请检查一下 dmesg/var/log/messages对于运行后有关终止进程的消息?
  3. 如果您的进程忙于等待,您能否尝试 a) 使用 jstack 收集堆栈跟踪信息? (对于 fork 进程和主要进程) b) 量化 massive load on the system在 cpu/内存使用/调入/调出的内容量方面
  4. 如果这些都没有用,我会尝试 fork surefire ForkStarter添加更多日志记录事件并比较成功运行和失败运行的日志以获取更多线索。 (--debug-X maven 输出调试消息的参数)。

关于java - Surefire forkCount 不会产生这个数量的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39892848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com