Macのコンテンツキャッシュの詳細設定
詳細構成パラメータを使って、ネットワーク構成に合わせてコンテンツキャッシュを微調整できます。
コンテンツキャッシュの詳細構成パラメータを設定するには、「ターミナル」でコマンドラインを使用するか、/ライブラリ/Preferences/com.apple.AssetCache.plistファイルでキーの値を変更します。変更を反映するには、コンテンツキャッシュを停止して再起動する必要がある場合があります。
詳細設定を設定する
「システム設定」(macOS 13以降)または「システム環境設定」(macOS 12.0.1以前)>「共有」>「コンテンツキャッシュ」と選択して、コンテンツキャッシュサービスの一部の詳細設定を構成できます。次に、Optionキーを押したまま、「詳細オプション」を選択します。
Macのターミナルアプリで、defaults
コマンドのあとにsudo AssetCacheManagerUtil reloadSettings
コマンドを使用して、さらに詳細な設定を構成することもできます。コマンドAssetCacheManagerUtil settings
を使用すると、標準(詳細でない)設定が表示されます。
defaults
コマンドを使用して、単純キーと複合キーの両方を設定できます。
例えば、ポート番号(50000)を非ダイナミックポート番号にハードコードするには、ポート番号を49192から65535までの任意の数とし、以下のコマンドを管理者として実行します:
$ sudo -u _assetcache defaults write /Library/Preferences/com.apple.AssetCache.plist Port -int 50000
ListenRanges
キーは、辞書の配列を取る複合キーです。例えば、このコマンドを管理者として実行し、ListenRangesキー向けに2つのIPアドレス範囲を設定します:
$ sudo -u _assetcache defaults write /Library/Preferences/com.apple.AssetCache.plist ListenRanges '( { first = 10.0.0.1; last = 10.0.0.254; }, { first = 10.1.0.1; last = 10.1.0.254; } )'
defaultsコマンドを使用した後は、必ず次のコマンドを実行してコンテンツキャッシュの設定を再読み込みしてください:
$ sudo AssetCacheManagerUtil reloadSettings
キャッシュ設定plistのキーと値
重要: com.apple.AssetCache.plistファイルの設定は、以下の表で説明するもの以外は変更しないでください。
鍵は2つの値の間でクランプされる値を設定できます。キー値は、低い値以上、高い値以下の範囲内の数値にすることができます。下限値より下に設定すると、下限値が使用されます。上限値より上に設定すると、上限値が使用されます。たとえば、PeerDownloadTimeoutは、5以上、300以下にクランプされます。値を301や1000に設定すると、300に設定されます。値を4や-10に設定すると、5に設定されます。
AssetCacheManagerUtil reloadSettings
を実行すると、一部の設定が有効になります。そのほかの設定は、コンテンツキャッシュを停止してから再起動する必要があります。reloadSettingsをサポートするのは、「コンテンツキャッシュ」環境設定でも設定できるキーのみです(以下の表に記載)。「コンテンツキャッシュ」環境設定で値を設定するには:
macOS 13以降: アップルメニュー>「システム設定」>「一般」>「共有」>「コンテンツキャッシュ」と選択する。
macOS 12.0.1以前: アップルメニュー>「システム環境設定」>「共有」>「コンテンツキャッシュ」と選択する。
キー | 説明 | デフォルト値 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AgeForLowSpaceAlert | 空きストレージ領域が少なくなっているためにコンテンツがコンテンツキャッシュから消去されるときに通知します。さらに、消去されるコンテンツがこの日数より前にコンテンツキャッシュに追加されている場合に、容量不足のアラートが表示されることを通知します。 | 30(日) | |||||||||
AllowCacheDelete | コンピュータでほかのアプリ用にストレージ容量が必要な場合に、コンテンツをキャッシュから自動的に消去することを許可します。 コンテンツキャッシュの効果を最大限に活用するには、この設定をオフにします。 | はい | |||||||||
AllowImports | 読み込み(アップロード)要求を許可します。 | はい | |||||||||
AllowPersonalCaching | ユーザのiCloudデータのキャッシュを許可します。AllowPersonalCachingキーとAllowSharedCachingキーの少なくとも1つは、yesでなければなりません。 この値は「コンテンツキャッシュ」設定でも設定できます。 | はい | |||||||||
AllowSharedCaching | アプリやソフトウェアアップデートなどのiCloud以外のコンテンツのキャッシュを制御します。AllowPersonalCachingキーとAllowSharedCachingキーの少なくとも1つは、yesでなければなりません。 | はい | |||||||||
AllowWirelessPortable | Wi-Fiネットワークのみに接続しているMacノートブックコンピュータに対し、コンテンツキャッシュの実行を許可します。 | はい | |||||||||
CacheLimit | コンテンツキャッシュに使用されるストレージ容量の最大バイト数を指定します。 この値は「コンテンツキャッシュ」設定でも設定できます。 | 0(無制限) | |||||||||
DatabaseUpdateInterval | コンテンツキャッシュがそのストレージ上のデータベースに対する変更内容を保存する頻度を指定します。この間隔を長くすると、キャッシュされたコンテンツが停電後に失われるリスクが高まります。最小値は3600秒(1時間)です。間隔0は、データベースのアップデートを常に遅れなく即座に行うことを意味し、パフォーマンスが低下します。 | 5(秒) | |||||||||
DataPath | キャッシュされたコンテンツの保存に使用されるディレクトリのパスを指定します。 この設定を手動で変更しても、キャッシュコンテンツは古い場所から新しい場所に自動的に移動することはありません。コンテンツを自動的に移動するには、「コンテンツキャッシュ」設定を使用します。 この値は「コンテンツキャッシュ」設定でも設定できます。 | /ライブラリ/Application Support/Apple/AssetCache/Data | |||||||||
DisplayAlerts | コンテンツキャッシュの通知を表示します。 コンテンツキャッシュの効果を最大限に活用するには、この設定をオンにします。 | いいえ | |||||||||
DownloadMinRate | コンテンツキャッシュからコンテンツをダウンロードする間にクライアントが維持する必要がある、1秒あたりの最小バイト数を指定します。これより遅い速度でデータが転送される場合、コンテンツキャッシュはダウンロードを停止します。クランプ最小値は1000バイト/秒です。 | 8000(バイト/秒) | |||||||||
DownloadTimeout | クライアントへのダウンロードが中止されるまでに許容されるアイドル時間(秒)を指定します。クランプ最小値は10秒です。 | 180(秒) | |||||||||
ImportMaxRate | コンテンツキャッシュが各クライアントからデータを受信するときの1秒あたりの最大バイト数を指定します。「0」は、速度(バイト/秒)に制限がないことを示します。 | 0(バイト/秒) | |||||||||
ImportMinRate | コンテンツの読み込み(アップロード)中にクライアントが維持する必要のある最小バイト/秒を指定します。コンテンツキャッシュは、これより遅い速度でデータを転送する読み込みを中止します。最小値は100バイト/秒です。 | 2000(バイト/秒) | |||||||||
ImportRateAttenuation | アップロード時間に加味される減衰率を指定します。クランプの下限は減衰率0 %です。値が大きすぎると、ImportTimeoutを超えてしまい、失敗を引き起こします。 | 20(%) | |||||||||
ImportTimeout | クライアントからの読み込み(アップロード)が中止されるまでに許容されるアイドル時間の長さ(秒)を指定します。最小値は10秒です。 | 300(秒) | |||||||||
Interface | コンテンツキャッシュに使用されるネットワークインターフェイスのBSD名を指定します。例えばen0とします。また、常にループバックインターフェイス(localhost)でリッスンします。 | 選択したインターフェイスでリッスン | |||||||||
KeepAwake | コンテンツキャッシュがオンのときはコンピュータをスリープ解除したままにします。 利用可能なコンテンツキャッシュを増やすには、この設定をオンにします。「システム設定」(macOS 13以降の場合)または「システム環境設定」(macOS 12.0.1以前の場合)の「省エネルギー」で「ディスプレイがオフのときにコンピュータを自動でスリープさせない」チェックボックスを選択します。 | いいえ | |||||||||
ListenRanges | サービスが提供されるクライアントIPアドレスの範囲を示すディクショナリの配列。 ListenRangesキーの使用例は、以下を参照してください。 typeサブキーは不要になり、指定した場合は無視されます。 この値は「コンテンツキャッシュ」設定でも設定できます。 | なし | |||||||||
ListenRangesOnly | ListenRangesOnlyをtrueに設定すると、コンテンツキャッシュはListenRangesキーで指定された範囲内のクライアントのみにコンテンツを提供します。 ListenRangesOnlyキーを使用する場合は、ListenRangesキーも指定する必要があります。 この値は「コンテンツキャッシュ」設定でも設定できます。 | いいえ | |||||||||
ListenWithPeers AndParents | コンテンツキャッシュがListenRanges、PeerListenRanges、およびParentsキーの共用体に登録されるか、ListenRangesキーにのみ登録されるかを示します。 ListenRangesはLocalSubnetsOnlyから自動的に生成でき、PeerListenRangesはPeerLocalSubnetsOnlyから自動的に生成できます。 | デフォルト値はコンピュータの履歴によって異なります:
| |||||||||
LocalSubnetsOnly | コンテンツキャッシュがコンテンツを、コンテンツキャッシュからアクセス可能なすべてのローカルネットワーク上のクライアントではなく、コンテンツキャッシュと同じローカルネットワーク上のクライアントのみに提供するかどうかを示します。 この値は「コンテンツキャッシュ」設定でも設定できます。 | はい | |||||||||
LogClientIdentity | コンテンツを要求するクライアントのIPアドレスおよびポート番号をコンテンツキャッシュが記録する必要があるかどうかを決定します。 | いいえ | |||||||||
MaxConcurrentClients | コンテンツキャッシュが対応できるクライアントの最大数を指定します。Appleは、コンテンツキャッシュが3400のクライアントに同時に対応できることを保証するわけではありません。 | 3400 | |||||||||
MaxParentDepth | 1つの要求に対し、子コンテンツキャッシュがその要求をペアレントコンテンツキャッシュに転送する最大回数を指定します。 階層が深すぎる要求(転送する連鎖が長すぎる場合)は、親ではなく元のコンテンツキャッシュに強制されます。 | 8 | |||||||||
MaxPeersToQuery | コンテンツを要求するピアキャッシュサーバの最大数を指定します。 | 0(無制限) | |||||||||
MetricsInterval | /ライブラリ/Application Support/Apple/AssetCache/Metrics/Metrics.db内のメトリックデータベースにメトリック行を追加する頻度(秒)を指定します。
1秒以上、60秒以下にクランプされます。 これらのメトリックはアクティビティモニタの「キャッシュ」パネルで見ることができます。 | 60(秒) | |||||||||
MetricsMaxAge | この日数より古いメトリックは、1日に1回、メトリックデータベースから削除されます。クランプ最小値は30日です。 | 30(日) | |||||||||
OriginDownloadTimeout | Appleのサーバからのダウンロードが中止される(また、おそらくダウンロードが再試行される)までに許容されるアイドル時間の長さ(秒)を指定します。5秒以上、300秒以下にクランプされます。 | 60 | |||||||||
OriginUploadTimeout | 元のサーバへのアップロードが中止されるまでに許容されるアイドル状態の長さ(秒)を指定します。5秒以上、3600秒以下にクランプされます。 | 600 | |||||||||
ParentDownloadTimeout | 親のコンテンツキャッシュからのダウンロードが中止される(また、おそらくダウンロードが再試行される)までに許容されるアイドル時間の長さ(秒)を指定します。5秒以上、300秒以下にクランプされます。 | 60 | |||||||||
ParentRetryInterval | 親のコンテンツキャッシュでネットワークエラーまたはサーバエラーが5回連続で発生した後、親のコンテンツキャッシュを無視する時間の長さ(秒)を指定します。30秒以上、3600秒以下にクランプされます。 | 900 | |||||||||
Parents | このキャッシュが、Appleから直接ダウンロードまたはアップロードする代わりに、コンテンツをダウンロードまたはアップロードするほかのコンテンツキャッシュのローカルIPアドレスのリスト。 無効なアドレス、およびコンテンツキャッシュではないコンピュータのアドレスは無視されます。 使用できなくなった親のキャッシュはParentRetryIntervalに従ってスキップされます。 すべてのペアレントコンテンツキャッシュが使用不可になると、ペアレントコンテンツキャッシュが再度使用可能になるまで、コンテンツキャッシュはAppleから直接ダウンロードまたはAppleに直接アップロードします。 この値は「コンテンツキャッシュ」設定でも設定できます。 | なし | |||||||||
ParentSelectionPolicy | 複数ある構成済みの親のコンテンツキャッシュから選択するときに使用するポリシー。 すべてのポリシーで、一時的に使用できない親のキャッシュはスキップされます。 以下のポリシーがあります:
この値は「コンテンツキャッシュ」設定でも設定できます。 | round-robin | |||||||||
ParentUploadTimeout | 親のコンテンツキャッシュへのアップロードが中止されるまでに許容されるアイドル状態の長さ(秒)を指定します。5秒以上、3600秒以下にクランプされます。 | 600 | |||||||||
PeerDownloadTimeout | ピアコンテンツキャッシュからのダウンロードが中止される(また、おそらくダウンロードが再試行される)までに許容されるアイドル時間の長さ(秒)を指定します。5秒以上、300秒以下にクランプされます。 | 30 | |||||||||
PeerFilterRanges | PeerFilterRangesが配列(ListenRangesのエントリーなどの配列)の場合、コンテンツキャッシュはその配列で指定された範囲に従ってピアのリストにフィルタと並べ替えを適用します。 コンテンツキャッシュはPeerFilterRanges内のピアのクエリーのみを実行します。フィルタと並べ替えは、MaxPeersToQueryのエントリーでピアのリストが切り捨てられる(MaxPeersToQueryの設定が存在する場合)前に適用されます。 PeerFilterRangesが空の配列の場合、コンテンツキャッシュはどのピアのクエリーも実行しません。 PeerFilterRangesが論理値のtrueの場合、コンテンツキャッシュは上記と同じ処理を実行しますが、PeerFilterRangesの値ではなくListenRangesを使用します。 PeerFilterRangesがほかのいずれかの型の場合、または値が指定されていない場合、コンテンツキャッシュはMaxPeersToQueryのエントリーでピアのリストを切り捨てる前に、リストにフィルタも並べ替えも適用しません。 PeerFilterRangesは、このコンテンツキャッシュがコンテンツとダウンロードのクエリーを実行するほかのコンテンツキャッシュのリストのみに影響を及ぼします。ほかのコンテンツキャッシュから受信するコンテンツの要求には影響を及ぼしません。 typeサブキーは不要になり、指定した場合は無視されます。 この値は「コンテンツキャッシュ」設定でも設定できます。 | なし | |||||||||
PeerListenRanges | PeerListenRangesがディクショナリの配列で、各ディクショナリがIPアドレスの範囲を表す場合、コンテンツキャッシュは、この範囲配列内に含まれるIPアドレスを持つコンテンツキャッシュからのピアキャッシュクエリーにのみ正常に応答します。 PeerListenRangesが空の配列の場合、コンテンツキャッシュは、ほかのコンテンツキャッシュからのキャッシュクエリーにエラーを返します。 PeerListenRangesが論理値のtrueの場合、コンテンツキャッシュは、PeerListenRanges値ではなくListenRanges値を使用して、ほかのどのコンテンツキャッシュからのキャッシュクエリーに正常に応答するかを決定します。 PeerListenRangesがほかのいずれかの型や値の場合、または値が指定されていない場合は、コンテンツキャッシュは、ほかのすべてのコンテンツキャッシュからのキャッシュクエリーに正常に応答します。 PeerListenRangesは、このコンテンツキャッシュがどのコンテンツキャッシュからのキャッシュクエリーに正常に応答するかということにのみ影響を及ぼします。このコンテンツキャッシュがコンテンツのクエリーを実行してコンテンツをダウンロードするピアのリストには影響を及ぼしません。 コンテンツキャッシュがキャッシュクエリーに対してエラーを返すと、クエリーの実行元コンテンツキャッシュは応答したコンテンツキャッシュをフレンドリでないとマークし、PeerRetryIntervalが経過するまでフレンドリでないコンテンツキャッシュに再びクエリーを試みることはありません。 typeサブキーは不要になり、指定した場合は無視されます。 この値は「コンテンツキャッシュ」設定でも設定できます。 | なし | |||||||||
PeerLocalSubnetsOnly | コンテンツキャッシュが、このコンピュータと同じパブリックIPアドレスを使うコンテンツキャッシュとではなく、同じローカルネットワーク上のほかのコンテンツキャッシュとのみピアであるかどうかを示します。 PeerLocalSubnetsOnlyがtrueの場合、コンテンツキャッシュは同じローカルネットワーク上のコンテンツキャッシュにのみクエリーを実行し、そのコンテンツキャッシュからのピアクエリーにのみ正常に応答します。 PeerLocalSubnetsOnlyがtrueの場合、PeerLocalSubnetsOnlyはPeerFilterRangesおよびPeerListenRangesの構成より優先されます。 PeerLocalSubnetsOnlyがfalseの場合、コンテンツキャッシュはPeerFilterRangesおよびPeerListenRangesに従ってピアリング制限を構成します。 PeerLocalSubnetsOnlyがtrueの場合にネットワークが変更されると、ローカルネットワークのピアの制限がそれに応じてアップデートされます。 この値は「コンテンツキャッシュ」設定でも設定できます。 | はい | |||||||||
PeerNotifyTimeout | 起動時にピアコンテンツキャッシュに「ping」するとき、ピアコンテンツキャッシュからの応答を待つ時間の長さ(秒)を指定します。5秒以上、300秒以下にクランプされます。 | 30 | |||||||||
PeerQueryTimeout | ピアコンテンツキャッシュのキャッシュにあるコンテンツについて照会するとき、ピアコンテンツキャッシュからの応答を待つ時間の長さ(秒)を指定します。1秒以上、60秒以下にクランプされます。 | 5 | |||||||||
PeerRetryInterval | ピアコンテンツキャッシュへの通知またはクエリーが3回連続で失敗した後、ピアコンテンツキャッシュを無視する時間の長さ(秒)を指定します。再試行間隔の時間が経過すると、ピアコンテンツキャッシュはコンテンツのクエリー先となるピアのリストに戻されます。30秒以上、3600秒以下にクランプされます。 | 900(秒) | |||||||||
PersonalCacheLimit | コンテンツキャッシュがiCloudデータのキャッシュに使用するストレージ領域(バイト単位)を制限します。PersonalCacheLimitはCacheLimitを超えることはできません。 | 0(無制限) | |||||||||
Port | コンテンツキャッシュがアップロードまたはダウンロード要求を受け入れるTCPポート番号を指定します。 | 0(ランダムなポートを使用) | |||||||||
PruneAffinitiesAge | この日数より古いユーザアフィニティが、アフィニティのキャッシュから自動的に削除されます。ユーザアフィニティは、パフォーマンス向上のため、コンテンツがキャッシュされる場所に関するヒントをクライアントに提供します。ユーザアフィニティを削除してもキャッシュされたコンテンツには影響しません。クランプ最小値は7日です。 | 30(日) | |||||||||
PruneAffinitiesInterval | コンテンツキャッシュがPruneAffinitiesAgeの日数より古いユーザアフィニティをスキャンして削除する頻度(日)を指定します。iCloudのみで使用されるユーザアフィニティは、パフォーマンス向上のため、コンテンツがキャッシュされる場所に関するヒントをクライアントに提供します。ユーザアフィニティを削除してもキャッシュされたコンテンツには影響しません。クランプ最小値は1日です。 | 7(日) | |||||||||
PruneAssetsAge | ここで指定された日数の間に要求されなかったコンテンツは、コンテンツキャッシュから自動的に削除されます。クランプ最小値は7日です。 | 120(日) | |||||||||
PruneAssetsInterval | PruneAssetsAgeで指定された日数よりも古いコンテンツをコンテンツキャッシュがスキャンして削除する頻度(日)を指定します。クランプ最小値は1日です。 | 7(日) | |||||||||
PublicRanges | クラウドサーバがクライアントとコンテンツキャッシュを照合するために使用するパブリックIPアドレスの範囲を指定します。 この値は「コンテンツキャッシュ」設定でも設定できます。 | デフォルトなし | |||||||||
ReservedVolumeSpace | キャッシュコンテンツを保存するボリュームに保持する空きストレージ容量の最小バイト数を指定します。 | 2000000000(2 GB) | |||||||||
TerminationTimeout | コンテンツキャッシュが停止中に登録解除を試みる時間の長さ(秒)を指定します。登録を解除するとクライアントにコンテンツキャッシュが使用できなくなったことが通知されるため、クライアントはそれ以上(またはコンテンツキャッシュが再度起動されるまで)そのコンテンツキャッシュの使用を試みなくなります。1秒以上、60秒以下にクランプされます。 | 10(秒) | |||||||||
Verbose | Verboseがtrueの場合、コンテンツキャッシュはそのアクティビティに関する追加の情報をログに記録します。ログ記録を増やすことで、パフォーマンスが低下することがあります。この設定は、長期使用では推奨されません。 ターミナルアプリで 例: コンソールアプリを使って、ログを表示することもできます。 | いいえ |
ListenRangesキーの例
ListenRangesキーを使用して、同じパブリックIPアドレスの背後で複数のコンテンツキャッシュが使用される高度なネットワークトポロジで、優先されるコンテンツキャッシュを指定できます。
例を示します:
caching1.betterbag.comで、ListenRangesキーを使って10.0.0.1〜10.0.0.254および10.1.0.1〜10.1.0.254の範囲を指定し、ListenRangesOnlyキーをNoに設定します。
caching2.betterbag.comで、ListenRangesキーを使って10.1.0.1〜10.1.0.39の範囲を指定し(caching1の2つ目の範囲と重複していることに注意してください)、ListenRangesOnlyキーをNoに設定します。
IPアドレス10.0.0.10のクライアントがコンテンツを要求すると、要求はcaching1に送られます。
IPアドレス10.1.0.10のクライアントがコンテンツを要求すると、要求はcaching1またはcaching2がランダムに選択されてどちらかに送られます。
IPアドレス10.2.0.10のクライアントがコンテンツを要求すると、要求はcaching1またはcaching2がランダムに選択されてどちらかに送られます。
caching1がシステム終了されているか電源が切断されているが、caching2は引き続き使用可能な場合は、すべてのクライアントからの要求がcaching2に送られます。
plistファイルの例
以下は、サンプルの/ライブラリ/Preferences/com.apple.AssetCache.plistファイルです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CacheLimit</key>
<!-- Set a CacheLimit of 200 GB -->
<integer>200000000000</integer>
<key>DataPath</key>
<string>/Volumes/BigVolume/Library/Application Support/Apple/AssetCache/Data</string>
<key>Interface</key>
<string>en1</string>
<key>ListenRanges</key>
<array>
<dict>
<key>type</key>
<string>IPv4</string>
<key>first</key>
<string>10.1.2.1</string>
<key>last</key>
<string>10.1.2.254</string>
</dict>
<dict>
<key>type</key>
<string>IPv6</string>
<key>first</key>
<string>2001:500:88:200::1</string>
<key>last</key>
<string>2001:500:88:200::99</string>
</dict>
</array>
<key>LogClientIdentity</key>
<string>true</string>
<key>Port</key>
<integer>12345</integer>
<key>ReservedVolumeSpace</key>
<!-- Set the ReservedVolumeSpace to 1 GB -->
<integer>1000000000</integer>
</dict>
</plist>