Mac 上的高级内容缓存设置
你可以使用高级配置参数针对网络配置微调内容缓存。
你可以在“终端”中使用命令行或通过修改“/资源库/Preferences/com.apple.AssetCache.plist”文件中的键值,来设定内容缓存的高级配置参数。若要使某些更改生效,必须停止并重新启动内容缓存。
设定高级设置
你可以为内容缓存服务配置某些高级设置,方法是前往“系统设置”(macOS 13 或更高版本)或者“系统偏好设置”(macOS 12.0.1 或更低版本)>“共享”>“内容缓存”。然后按住 Option 键并选择“高级选项”。
你可以在 Mac 上通过“终端” App 来配置更高级的设置,方法是使用 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 键的两个 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 文件中除下表所述设置之外的任何设置。
键值可以固定在两个值之间。该键值可以是下限值和上限值之间范围内的任何数字。如果设定为低于下限值,则使用下限值。如果将值设定为高于上限值,则使用上限值。例如,PeerDownloadTimeout 固定在 5 和 300 之间。如果将其设定为 301 或 1000,则会将值设定为 300。如果将其设定为 4 或 -10,则会将值设定为 5。
运行 AssetCacheManagerUtil reloadSettings
后某些更改即生效;其他更改需要你停止并重新启动内容缓存才能生效。只有可在“内容缓存”偏好设置中设定的键支持 reloadSettings(请参阅下表)。若要在“内容缓存”偏好设置中设定值:
macOS 13 或更高版本:选取苹果菜单 >“系统设置”>“通用”>“共享”>“内容缓存”。
macOS 12.0.1 或更低版本:选取苹果菜单 >“系统偏好设置”>“共享”>“内容缓存”。
键 | 描述 | 默认值 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AgeForLowSpaceAlert | 当内容因储存空间不足而从内容缓存清除,且清除的内容添加到内容缓存的时间少于这个天数时,你会收到空间不足的提醒。 | 30(天) | |||||||||
AllowCacheDelete | 当电脑上的其他 App 需要储存空间时,允许自动从缓存清除内容。 为了较有效利用内容缓存,请关闭此设置。 | 是 | |||||||||
AllowImports | 允许导入(上传)请求。 | 是 | |||||||||
AllowPersonalCaching | 允许缓存用户的 iCloud 数据。AllowPersonalCaching 或 AllowSharedCaching 键中必须至少有一个为“Yes”。 你还可以在“内容缓存”设置中设定此值。 | 是 | |||||||||
AllowSharedCaching | 控制非 iCloud 内容的缓存,例如 App 和软件更新。AllowPersonalCaching 或 AllowSharedCaching 键中必须至少有一个为“Yes”。 | 是 | |||||||||
AllowWirelessPortable | 允许只有接入无线局域网的 Mac 笔记本电脑运行内容缓存。 | 是 | |||||||||
CacheLimit | 指定用于内容缓存的最大储存空间字节数。 你还可以在“内容缓存”设置中设定此值。 | 0(未限定) | |||||||||
DatabaseUpdateInterval | 指定内容缓存将更改存储到储存数据库的频率。增大间隔会增加断电后丢失缓存内容的风险。最多为 3600 秒(1 小时)。间隔为 0 意味着始终立即更新数据库,无任何延迟,这会降低性能。 | 5(秒) | |||||||||
DataPath | 指定用于储存缓存内容的目录路径。 手动更改此设置不会自动将缓存内容从旧位置移到新位置。若要自动移动内容,请使用“内容缓存”设置。 你还可以在“内容缓存”设置中设定此值。 | /资源库/Application Support/Apple/AssetCache/Data | |||||||||
DisplayAlerts | 显示内容缓存提醒的通知。 为了较有效利用内容缓存,请打开此设置。 | 否 | |||||||||
DownloadMinRate | 指定客户端在从内容缓存下载内容时,每秒必须维持的最低字节数。当数据传输低于此速率时,内容缓存将停止下载。固定最小值为 1000 字节/秒。 | 8000(字节/秒) | |||||||||
DownloadTimeout | 指定下载到客户端在放弃前,允许闲置的时长(以秒钟为单位)。固定最小值为 10 秒。 | 180(秒) | |||||||||
ImportMaxRate | 指定内容缓存从各客户端接收数据的每秒最大字节数。值为 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 键的示例。 子键类型不再需要,如果存在,将被忽略。 你还可以在“内容缓存”设置中设定此值。 | 无 | |||||||||
ListenRangesOnly | 如果将 ListenRangesOnly 设定为 true,则内容缓存仅向 ListenRanges 键所指定范围内的客户端提供内容。 如果想要使用 ListenRangesOnly 键,则还必须指定 ListenRanges 键。 你还可以在“内容缓存”设置中设定此值。 | 否 | |||||||||
ListenWithPeers AndParents | 指示内容缓存是向 ListenRanges、PeerListenRanges 和 Parents 键组合注册,还是仅向 ListenRanges 键注册。 请注意,ListenRanges 应该从 LocalSubnetsOnly 自动生成,而 PeerListenRanges 应该从 PeerLocalSubnetsOnly 自动生成。 | 具体的默认值取决于电脑的历史记录:
| |||||||||
LocalSubnetsOnly | 指示内容缓存是否应仅向与内容缓存位于同一直接本地网络的客户端提供内容,而不是向内容缓存能够访问的所有本地网络上的客户端提供内容。 你还可以在“内容缓存”设置中设定此值。 | 是 | |||||||||
LogClientIdentity | 确定内容缓存是否应该记录请求内容的客户端的 IP 地址和端口号。 | 否 | |||||||||
MaxConcurrentClients | 指定内容缓存可支持的客户端数量上限。Apple 不保证内容缓存可以承载 3400 台并发的客户端。 | 3400 | |||||||||
MaxParentDepth | 指定子内容缓存将请求转发给父内容缓存的次数上限(针对单个请求)。 过深(转发链过长)的请求将会强制返回原始内容缓存,而不会转发到父内容缓存。 | 8 | |||||||||
MaxPeersToQuery | 指定请求内容的对等内容缓存的数量上限。 | 0(未限定) | |||||||||
MetricsInterval | 指定将一行指标添加到“/资源库/Application Support/Apple/AssetCache/Metrics/Metrics.db”中指标数据库的频率(以秒钟为单位)。
固定在 1-60 秒(包括)之间。 你可以在“活动监视器”的“缓存”面板中查看这些指标。 | 60(秒) | |||||||||
MetricsMaxAge | 早于此天数的指标会从指标数据库中移除,每天一次。固定最小值为 30 天。 | 30(天) | |||||||||
OriginDownloadTimeout | 指定允许从 Apple 服务器下载闲置之后放弃(和可能会再次尝试下载)的时长(以秒钟为单位)。固定在 5 到 300 秒之间(包括 5 秒和 300 秒)。 | 60 | |||||||||
OriginUploadTimeout | 指定到源服务器的上传在放弃前允许闲置的时长(以秒钟为单位)。固定在 5 到 3600 秒之间(包括 5 秒和 3600 秒)。 | 600 | |||||||||
ParentDownloadTimeout | 指定允许从父内容缓存下载闲置之后放弃(和可能会再次尝试下载)的时长(以秒钟为单位)。固定在 5 到 300 秒之间(包括 5 秒和 300 秒)。 | 60 | |||||||||
ParentRetryInterval | 指定在出现五次连续网络故障或服务器错误后,忽略父内容缓存的时长(以秒钟为单位)。固定在 30 到 3600 秒之间(包括 30 秒和 3600 秒)。 | 900 | |||||||||
Parents | 其他内容缓存的本地 IP 地址列表,此缓存应从这些地址中下载或上传内容,而不是直接从 Apple 下载或上传到 Apple。 无效地址以及内容缓存并未忽略的电脑地址。 不可用的父缓存根据 ParentRetryInterval 被跳过。 如果所有父内容缓存都不可用,内容缓存将直接从 Apple 下载或上传到 Apple,直到父内容缓存再次可用。 你还可以在“内容缓存”设置中设定此值。 | 无 | |||||||||
ParentSelectionPolicy | 在多个配置的父内容缓存中选取时要使用的策略。 所有策略都会跳过暂时不可用的父缓存。 策略包括:
你还可以在“内容缓存”设置中设定此值。 | round-robin | |||||||||
ParentUploadTimeout | 指定到父内容缓存的上传在放弃前,允许闲置的时长(以秒钟为单位)。固定在 5 到 3600 秒之间(包括 5 秒和 3600 秒)。 | 600 | |||||||||
PeerDownloadTimeout | 指定允许从对等内容缓存下载闲置之后放弃(和可能会再次尝试下载)的时长(以秒钟为单位)。固定在 5 到 300 秒之间(包括 5 秒和 300 秒)。 | 30 | |||||||||
PeerFilterRanges | 当 PeerFilterRanges 是由条目(如 ListenRanges 条目)构成的数组时,内容缓存会根据数组中的范围过滤和排列其对等列表。 内容缓存仅查询在 PeerFilterRanges 内的对等端。过滤和排列将在截断 MaxPeersToQuery 条目处的对等列表之前应用(如果该设置未显示)。 PeerFilterRanges 为空数组时,内容缓存不会查询任何对等端。 PeerFilterRanges 为布尔值 true 时,内容缓存会执行上述相同操作,但使用的是 ListenRanges 值,而非 PeerFilterRanges 值。 PeerFilterRanges 为其他任何类型或值缺失时,内容缓存在截断 MaxPeersToQuery 条目处的列表之前,既不会过滤也不会排列其对等列表。 PeerFilterRanges 仅影响此内容缓存将从中查询内容和下载的其他内容缓存的列表。它不影响其他任何内容缓存传入的内容请求。 子键类型不再需要,如果存在,将被忽略。 你还可以在“内容缓存”设置中设定此值。 | 无 | |||||||||
PeerListenRanges | PeerListenRanges 为词典数组且每个词典代表一个 IP 地址范围时,内容缓存只能成功响应 IP 地址包含在此数组范围内的内容缓存的对等缓存查询。 PeerListenRanges 为空数组时,内容缓存在响应任何其他内容缓存的缓存查询时都会返回错误。 PeerListenRanges 为布尔值 true 时,内容缓存会使用 ListenRanges 值(而非 PeerListenRanges 值)来决定它成功响应哪些其他内容缓存的缓存查询。 PeerListenRanges 为任何其他类型或值丢失时,内容缓存会成功响应所有其他内容缓存的缓存查询。 PeerListenRanges 仅影响此内容缓存成功响应缓存查询的内容缓存。它不会影响此内容缓存从中查询内容和下载内容的对等端列表。 内容缓存针对缓存查询使用错误进行响应时,查询内容缓存会将响应内容缓存标记为不友好,并且不再尝试进行查询,直至 PeerRetryInterval 经过。 子键类型不再需要,如果存在,将被忽略。 你还可以在“内容缓存”设置中设定此值。 | 无 | |||||||||
PeerLocalSubnetsOnly | 指示内容缓存是否只应与位于同一直接本地网络上的其他内容缓存对等,而不是与使用同此电脑相同公共 IP 地址的内容缓存对等。 PeerLocalSubnetsOnly 为 true 时,内容缓存只能查询并成功响应同一直接本地网络上的内容缓存的对等查询。 PeerLocalSubnetsOnly 为 true 时,它将覆盖 PeerFilterRanges 和 PeerListenRanges 的配置。 PeerLocalSubnetsOnly 为 false 时,内容缓存按照 PeerFilterRanges 和 PeerListenRanges 来配置对等访问限制。 PeerLocalSubnetsOnly 为 true 且网络更改时,针对本地网络的对等访问限制会进行相应的更新。 你还可以在“内容缓存”设置中设定此值。 | 是 | |||||||||
PeerNotifyTimeout | 指定在启动时“ping”对等内容缓存时,等待其应答的时长(以秒钟为单位)。固定在 5 到 300 秒之间(包括 5 秒和 300 秒)。 | 30 | |||||||||
PeerQueryTimeout | 指定在询问对等内容缓存有关其缓存中的内容时,等待其应答的时长(以秒钟为单位)。固定在 1 到 60 秒之间(包括 1 秒和 60 秒)。 | 5 | |||||||||
PeerRetryInterval | 指定在出现三次连续通知或查询故障后,忽略对等内容缓存的时长(以秒钟为单位)。在重试间隔过去后,对等内容缓存将恢复到对等列表以查询是否有内容。固定在 30 到 3600 秒之间(包括 30 秒和 3600 秒)。 | 900(秒) | |||||||||
PersonalCacheLimit | 限制内容缓存用于缓存 iCloud 数据的储存空间大小(以字节为单位)。PersonalCacheLimit 不得超过 CacheLimit。 | 0(未限定) | |||||||||
Port | 指定内容缓存用于接受上传或下载请求的 TCP 端口号。 | 0(使用随机端口) | |||||||||
PruneAffinitiesAge | 早于此天数的用户亲缘关系会自动从亲缘关系缓存中移除。用户亲缘关系向客户端提供关于其内容缓存位置的提示,以提升性能。删除用户亲缘关系不会影响缓存的内容。固定最小值为 7 天。 | 30(天) | |||||||||
PruneAffinitiesInterval | 指定内容缓存应当扫描和移除早于 PruneAffinitiesAge 天数的用户亲缘关系的频率(以天为单位)。仅被 iCloud 使用的用户亲缘关系,它向客户端提供关于其内容缓存位置的提示,以提升性能。删除用户亲缘关系不会影响缓存的内容。固定最小值为一天。 | 7(天) | |||||||||
PruneAssetsAge | 在此天数内还未请求的内容将自动从内容缓存中移除。固定最小值为 7 天。 | 120(天) | |||||||||
PruneAssetsInterval | 指定内容缓存应当扫描和移除早于 PruneAssetsAge 天数的内容的频率(以天为单位)。固定最小值为一天。 | 7(天) | |||||||||
PublicRanges | 指定云服务器应将其用于匹配客户端与内容缓存的公共 IP 地址范围。 你还可以在“内容缓存”设置中设定此值。 | 无默认值 | |||||||||
ReservedVolumeSpace | 指定要维护以用于缓存内容储存宗卷的可用储存空间的最小字节数。 | 2000000000 (2 GB) | |||||||||
TerminationTimeout | 指定内容缓存在被停止时应尝试取消注册的时长(以秒钟为单位)。取消注册会通知客户端该内容缓存不再可用,这样客户端将不再(或者,在内容缓存再次启用前不再)尝试使用该内容缓存。固定在 1 到 60 秒之间(包括 1 秒和 60 秒)。 | 10(秒) | |||||||||
Verbose | 当 Verbose = true 时,内容缓存将记录有关其活动的更多一点信息。随着记录的增加,性能会降低。不建议长期使用此设置。 在“终端” App 中使用 例如: 你还可以使用“控制台” App 来查看日志。 | 否 |
ListenRanges 键示例
你可以使用 ListenRanges 键在高级网络技术中指定首选内容缓存,其中在同一公共 IP 地址后使用多个内容缓存。
例如:
caching1.betterbag.com 使用 ListenRanges 键指定 10.0.0.1 到 10.0.0.254 和 10.1.0.1 到 10.1.0.254 的范围,并将 ListenRangesOnly 键设为“否”。
caching2.betterbag.com 使用 ListenRanges 键指定 10.1.0.1 到 10.1.0.39 的范围(注意与 caching1 第二个范围重叠),并将 ListenRangesOnly 键设为“否”。
如果 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>