このページでは、ローカル実行のコンテキストでキャッシュミスを調査する方法について説明します。
このページでは、ビルドやテストでローカルに正常にビルドされ、リモート キャッシュを使用するようにセットアップされていることと、リモート キャッシュが効果的に活用されていることを確認する必要があることを前提としています。
キャッシュ ヒット率を確認する方法と、2 つの 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 の呼び出しと同じターゲットをビルドすることを確認します。
c. マシン間のキャッシュを確実にする場合と同じ手順で、キャッシュ書き込みの Bazel の呼び出しからキャッシュ読み取りの Bazel の呼び出しまで、確実にキャッシュが行われるようにします。