调试远程缓存命中以在本地执行

报告问题 查看源代码

本页介绍了如何在本地执行环境中调查缓存未命中。

本页面假定您的构建和/或测试在本地成功构建,已设置为利用远程缓存,并且您希望确保有效利用远程缓存。

如需了解如何查看缓存命中率以及如何比较两次 Bazel 调用之间的执行日志,请参阅调试远程执行远程缓存命中。该指南中介绍的所有内容也适用于具有本地执行的远程缓存。但是,本地执行存在一些额外的挑战。

检查缓存命中率

成功的远程缓存命中将显示在状态行中,类似于 Remote Execution 的缓存命中率

在 Bazel 运行的标准输出中,您会看到如下内容:

   INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox.

这意味着,尝试的 7 项操作中有 3 项获得了远程缓存命中,4 项操作没有缓存命中,使用 linux-sandbox 策略在本地执行。此摘要中不包含本地缓存命中。如果得到的进程为 0(或数量小于预期),请运行 bazel clean,后跟构建/测试命令。

对缓存命中进行问题排查

如果您没有获得预期的缓存命中率,请执行以下操作:

确保与远程端点成功通信

为了确保您的构建能够成功与远程缓存通信,请按照本部分中的步骤操作。

  1. 检查输出是否存在警告

    使用远程执行时,如果无法与远程端点通信,构建将失败。另一方面,如果可缓存的本地构建无法缓存,它也不会失败。检查 Bazel 调用的输出是否存在警告,例如:

       WARNING: Error reading from the remote cache:
    

       WARNING: Error writing to the remote cache:
    

    此类警告后面会显示错误消息,详细说明连接问题,可帮助您进行调试,例如端点名称或错误设置凭据。请查找并解决任何此类错误。如果您看到的错误消息没有为您提供足够的信息,请尝试添加 --verbose_failures

  2. 请按照排查远程执行的缓存命中问题中的步骤,确保您的缓存写入 Bazel 调用能够在同一机器和不同机器上获取缓存命中。

  3. 确保缓存读取 Bazel 调用可以获取缓存命中。

    a. 由于缓存读取 Bazel 调用将设置不同的命令行,因此要特别注意确保它们已正确设置,以便与远程缓存进行通信。确保已设置 --remote_cache 标志,并且输出中没有警告。

    b. 确保缓存读取 Bazel 调用构建的目标与缓存写入 Bazel 调用构建的目标相同。

    c. 按照与确保跨机器缓存相同的步骤操作,以确保从缓存写入 Bazel 调用到缓存读取 Bazel 调用进行缓存。