| --- |
| layout: documentation |
| title: Debugging Remote Cache Hits for Local Execution |
| --- |
| |
| # Debugging Remote Cache Hits for Local Execution |
| |
| This page describes how to investigate cache misses in the context of local |
| execution. |
| |
| This page assumes that you have a build and/or test that successfully builds |
| locally and is set up to utilize remote caching, and that you want to ensure |
| that the remote cache is being effectively utilized. |
| |
| For tips on how to check your cache hit rate and how to compare the execution |
| logs between two Bazel invocations, see [Debugging Remote Cache Hits for Remote |
| Execution](/remote-execution-caching-debug.html). Everything presented in that |
| guide also applies to remote caching with local execution. However, local |
| execution presents some additional challenges which we will discuss here. |
| |
| ## Contents |
| |
| * [Checking your cache hit rate](#checking-your-cache-hit-rate) |
| * [Troubleshooting cache hits](#troubleshooting-cache-hits) |
| * [Comparing the execution logs](#comparing-the-execution-logs) |
| |
| ## Checking your cache hit rate |
| |
| Successful remote cache hits will show up in the status line, similarly to |
| [Cache Hits rate with Remote |
| Execution](/remote-execution-caching-debug.html#checking-your-cache-hit-rate)]. |
| In the standard output of your Bazel run, you will see something like the |
| following: |
| |
| INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox. |
| |
| This means that out of 7 attempted actions, 3 got a remote cache hit and 4 |
| actions did not have cache hits and were executed locally using `linux-sandbox` |
| strategy. Local cache hits are not included in this summary. If you are getting |
| 0 processes (or a number lower than expected), run `bazel clean` followed by |
| your build/test command. |
| |
| ## Troubleshooting cache hits |
| |
| If you are not getting the cache hit rate you are expecting, do the following: |
| |
| ### Ensure successful communication with the remote endpoint |
| |
| To ensure your build is successfully communicating with the remote cache, follow |
| the steps in this section. |
| |
| 1. Check your output for warnings |
| |
| With remote execution, a failure to talk to the remote endpoint would fail |
| your build. On the other hand, a cacheable local build would not fail if it |
| cannot cache. Check the output of your Bazel invocation for warnings, such |
| as: |
| |
| WARNING: Error reading from the remote cache: |
| |
| or |
| |
| WARNING: Error writing to the remote cache: |
| |
| Such warnings will be followed by the error message detailing the connection |
| problem that should help you debug: for example, mistyped endpoint name or |
| incorrectly set credentials. Find and address any such errors. |
| |
| 2. Follow the steps from [Troubleshooting cache hits for remote |
| execution](/remote-execution-caching-debug.html#troubleshooting-cache-hits) to |
| ensure that your cache-writing Bazel invocations are able to get cache hits |
| on the same machine and across machines. |
| |
| 3. Ensure your cache-reading Bazel invocations can get cache hits. |
| |
| a. Since cache-reading Bazel invocations will have a different command-line set |
| up, take additional care to ensure that they are properly set up to |
| communicate with the remote cache. Ensure the `--remote_cache` flag is set |
| and there are no warnings in the output. |
| |
| b. Ensure your cache-reading Bazel invocations build the same targets as the |
| cache-writing Bazel invocations. |
| |
| c. Follow the same steps as to [ensure caching across |
| machines](/remote-execution-caching-debug.html#ensure-caching-across-machines), |
| to ensure caching from your cache-writing Bazel invocation to your |
| cache-reading Bazel invocation. |
| |