このページでは、ローカル実行のコンテキストでキャッシュミスを調査する方法について説明します。
このページでは、ローカルで正常にビルドされ、リモート キャッシュを使用するよう設定されているビルドやテストがあり、リモート キャッシュが効果的に使用されていることを前提としています。
キャッシュ ヒット率を確認する方法と、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 呼び出しへのキャッシュを確実にします。