本页面介绍了如何在本地 执行的上下文中调查缓存未命中。
本页面假定您有一个构建和/或测试,该构建和/或测试已在本地成功构建 ,并且已设置为利用远程缓存,并且您希望确保 远程缓存得到有效利用。
如需了解如何检查缓存命中率以及如何比较两次 Bazel 调用之间的执行 日志,请参阅 调试远程执行的远程缓存命中。 该指南中介绍的所有内容也适用于本地 执行的远程缓存。不过,本地执行会带来一些额外的挑战。
检查缓存命中率
成功的远程缓存命中将显示在状态行中,类似于 远程执行的缓存命中率。
在 Bazel 运行的标准输出中,您会看到类似以下内容:
INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox.
这意味着,在 7 次尝试的操作中,3 次操作获得了远程缓存命中,而 4
次操作没有缓存命中,并且使用 linux-sandbox
策略在本地执行。此摘要中不包含本地缓存命中。如果您获得
0 个进程(或低于预期数量的进程),请运行 bazel clean,然后运行
构建/测试命令。
排查缓存命中问题
如果您未获得预期的缓存命中率,请执行以下操作:
确保与远程端点成功通信
如需确保构建与远程缓存成功通信,请按照 本部分中的步骤操作。
检查输出是否存在警告
使用远程执行时,如果无法与远程端点通信,构建将会失败 。另一方面,如果可缓存的本地构建无法缓存,则不会失败。检查 Bazel 调用的输出是否存在警告,例如 :
WARNING: Error reading from the remote cache:或
WARNING: Error writing to the remote cache:此类警告后会显示详细说明连接 问题的错误消息,该消息应有助于您进行调试:例如,端点名称输入错误或 凭据设置不正确。查找并解决任何此类错误。如果您看到的错误 消息提供的信息不足,请尝试添加
--verbose_failures。按照排查远程执行的缓存命中问题中的步骤操作,确保缓存写入 Bazel 调用能够在同一机器上和跨机器获得缓存命中。
确保缓存读取 Bazel 调用可以获得缓存命中。
a. 由于缓存读取 Bazel 调用将具有不同的命令行设置 ,因此请格外注意确保它们已正确设置为与 远程缓存通信。确保
--remote_cache标志已设置 并且输出中没有警告。b. 确保缓存读取 Bazel 调用构建的目标与 缓存写入 Bazel 调用构建的目标相同。