本页介绍了如何在本地执行的上下文中调查缓存未命中情况。
本页面假设您已有一个可在本地成功构建并已设置为利用远程缓存的 build 和/或测试,并且您希望确保远程缓存得到有效利用。
如需了解有关如何检查缓存命中率以及如何比较两次 Bazel 调用之间的执行日志的提示,请参阅远程执行的远程缓存命中调试。 该指南中介绍的所有内容也适用于本地执行的远程缓存。不过,本地执行也带来了一些额外的挑战。
查看缓存命中率
成功的远程缓存命中将显示在状态行中,类似于使用远程执行的缓存命中率。
在 Bazel 运行的标准输出中,您会看到类似以下内容:
INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox.
这意味着,在尝试执行的 7 个操作中,有 3 个操作命中了远程缓存,而有 4 个操作未命中缓存,并使用 linux-sandbox
策略在本地执行。此摘要中不包含本地缓存命中。如果您获得的进程数为 0(或低于预期),请运行 bazel clean
,然后运行 build/测试命令。
排查缓存命中问题
如果您未获得预期的缓存命中率,请执行以下操作:
确保与远程端点成功通信
为确保 build 成功与远程缓存通信,请按照本部分中的步骤操作。
检查输出中是否存在警告
如果使用远程执行,无法与远程端点通信会导致构建失败。另一方面,如果可缓存的本地 build 无法缓存,则不会失败。检查 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 调用构建相同的目标。
c. 按照与确保跨机器缓存相同的步骤操作,以确保从写入缓存的 Bazel 调用到读取缓存的 Bazel 调用进行缓存。