このページでは、ローカル実行のコンテキストにおけるキャッシュミスを調査する方法について説明します。
このページでは、ローカルビルドが正常にビルドされ、リモート キャッシュを使用するようにセットアップされているビルドとテストがあり、リモート キャッシュが効果的に利用されていることを前提としています。
キャッシュ ヒット率を確認する方法と 2 つの Bazel 呼び出し間で実行ログを比較する方法については、リモート実行でのリモート キャッシュ ヒットのデバッグをご覧ください。このガイドで説明する内容は、ローカル実行でのリモート キャッシュにも適用されます。しかし、ローカル実行ではさらなる課題があります。
キャッシュ ヒット率を確認する
リモート実行でのキャッシュ ヒット率と同様に、成功したリモート キャッシュ ヒットがステータス行に表示されます。
Bazel 実行の標準出力に、次のように表示されます。
INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox.
つまり、7 件の試行されたアクションのうち 3 件でリモート キャッシュ ヒットが発生し、4 件のアクションにキャッシュ ヒットがなく、linux-sandbox
戦略を使用してローカルで実行されました。ローカル キャッシュ ヒットは、この概要には含まれません。プロセスが 0 個(または想定よりも少ない数)が表示される場合は、bazel clean
に続いて build/test コマンドを実行します。
キャッシュ ヒットのトラブルシューティング
想定したキャッシュ ヒット率が得られない場合は、次の手順を行います。
リモート エンドポイントとの通信が正常であることを確認する
ビルドがリモート キャッシュと正常に通信していることを確認するには、このセクションの手順を行ってください。
出力に警告があるかどうかを確認する
リモート実行では、リモート エンドポイントと通信できない場合、ビルドは失敗します。一方、キャッシュに保存可能なローカルビルドは、キャッシュに保存できないと失敗します。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 呼び出しにキャッシュします。