什么可能导致“无行动”状态?

时间:2018-02-04 10:09:31

标签: bazel

我有一个构建一些神器的Bazel repo。问题是它停止了这条消息的一半:

[3 / 8] no action

地球上可能造成这种情况的原因是什么?这是正常的吗?

(不,问题不容易减少,有很多自定义代码,如果我可以将问题本地化,我不会写这个问题。我对一般答案感兴趣,原则上可能导致什么这是正常的。)

2 个答案:

答案 0 :(得分:2)

如果没有更多信息,很难回答你的问题,但是有时这是正常的。 Bazel做了一些不是行动的事情。

我见过这个的一个原因是Bazel是在计算很多大文件的摘要。如果您在Bazel服务器的堆栈跟踪中看到getDigestInExclusiveMode,则可能是由于此原因。如果这是您的问题,您可以试用--experimental_multi_threaded_digest标志。

答案 1 :(得分:1)

根据您运行Bazel的平台:

  • Windows :我见过类似的行为,但我还不确定原因。每隔几分钟,Bazel就会在启动时挂起大约半分钟。

    如果这是在执行阶段的中间构建(因为看起来是,因为Bazel已经打印了动作状态消息),那么一个可能的解释是你的构建包含许多shell命令。我测量了Linux(带有硬盘的VM),每个shell命令最多需要1-2ms,但在我的Windows 10机器(32G内存,3.5GHz CPU,硬盘)上,它们需要1-2秒,其中0.5%是命令最多需要10秒钟。如果您的操作对shell命令很重,那就会慢3-4个数量级。可以有很多解释(防病毒,慢速创建过程,MSYS很慢),Bazel都无法控制。

  • Linux / macOS :运行top并查看卡住的Bazel进程是否正在执行任何操作。尝试按Ctrl + \,这将打印一个JVM堆栈跟踪,这有助于识别问题。也许JVM在等待锁定 - 这意味着错误或规则实施不好。

还有其他可能性,也许你有一个挂起的构建规则。

Bazel最终会继续,还是会停留超过几分钟?