我有一个构建一些神器的Bazel repo。问题是它停止了这条消息的一半:
[3 / 8] no action
地球上可能造成这种情况的原因是什么?这是正常的吗?
(不,问题不容易减少,有很多自定义代码,如果我可以将问题本地化,我不会写这个问题。我对一般答案感兴趣,原则上可能导致什么这是正常的。)
答案 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最终会继续,还是会停留超过几分钟?