Ajustes avanzados del almacenamiento en caché de contenido en el Mac
Puedes usar parámetros de configuración avanzados para ajustar el almacenamiento en caché de contenido para la configuración de tu red.
Establece los parámetros de configuración avanzados para la caché de contenido usando la línea de comandos en Terminal o modificando el valor de las claves en el archivo /Librería/Preferences/com.apple.AssetCache.plist. Para que se apliquen algunos cambios, es necesario detener y reiniciar el almacenamiento en caché de contenido.
Definir ajustes avanzados
Si quieres configurar ajustes avanzados para el servicio de almacenamiento en caché de contenido, accede a Ajustes del Sistema (macOS 13 o posterior) o Preferencias del Sistema (macOS 12.0.1 o anterior) > Compartir > Almacenamiento en caché. A continuación, mantén pulsada la tecla Opción y selecciona “Opciones avanzadas”.
Puedes configurar aún más ajustes avanzados con la app Terminal en el Mac usando el comando defaults
, seguido del comando sudo AssetCacheManagerUtil reloadSettings
. Usa el comando AssetCacheManagerUtil settings
para ver la configuración estándar (no avanzada).
Puedes configurar claves tanto sencillas como complejas con el comando defaults
.
Por ejemplo, para asignar permanentemente el número de puerto (50000) a un número de puerto no dinámico, el número de puerto debería ser cualquiera comprendido entre 49192 y 65535, ejecuta este comando como administrador:
$ sudo -u _assetcache defaults write /Library/Preferences/com.apple.AssetCache.plist Port -int 50000
ListenRanges
es una clave compleja que toma una matriz de diccionarios. Por ejemplo, ejecuta este comando como administrador para configurar dos rangos de direcciones IP para la clave ListenRanges:
$ 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; } )'
Después de usar el comando defaults, recuerda ejecutar el siguiente comando para volver a cargar la configuración de la caché de contenido:
$ sudo AssetCacheManagerUtil reloadSettings
Claves y valores plist de configuración de almacenamiento en caché
Importante: No cambies ningún ajuste en el archivo com.apple.AssetCache.plist aparte de los descritos en la tabla a continuación.
Una clave puede tener un valor restringido entre dos valores. El valor de la clave puede ser cualquier número comprendido entre el valor bajo y el alto. Si se ajusta por debajo del valor mínimo, se utilizará el valor mínimo. Si se ajusta por encima del valor máximo, se utilizará el valor máximo. Por ejemplo, PeerDownloadTimeout está restringido entre 5 y 300. Si se ajusta a 301 o 1000, se utilizará el valor 300. Si se ajusta a 4 o -10, se utilizará el valor 5.
Algunos cambios entran en vigor después de ejecutar AssetCacheManagerUtil reloadSettings
; otros requieren que te detengas y vuelvas a iniciar el almacenamiento en caché del contenido. Las únicas claves que admiten reloadSettings son las que también se pueden configurar en el panel de preferencias “Almacenamiento en caché de contenido” (véase la tabla a continuación). Para definir preferencias de “Almacenamiento en caché”:
macOS 13 o posterior: Selecciona el menú Apple > Ajustes del Sistema > General > Compartir > Almacenamiento en caché.
macOS 12.0.1 o anterior: Selecciona el menú Apple > Preferencias del Sistema > Compartir > Almacenamiento en caché.
Clave | Descripción | Valor por omisión | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AgeForLowSpaceAlert | Te avisa cuando se borra contenido de la caché de contenido porque queda poco espacio de almacenamiento y el contenido borrado se ha añadido a la caché de contenido hace menos días de los especificados aquí, recibirá un aviso de poco espacio. | 30 (días) | |||||||||
AllowCacheDelete | Permite que se borre contenido de la caché automáticamente si el ordenador necesita espacio de almacenamiento para otras apps. Desactiva esta función para contar con la mejor eficacia de almacenamiento de caché de contenido. | Sí | |||||||||
AllowImports | Permite solicitudes de importación (carga). | Sí | |||||||||
AllowPersonalCaching | Permite el almacenamiento en caché de los datos de iCloud de los usuarios. Al menos una de las claves de AllowPersonalCaching o AllowSharedCaching debe ser sí. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | Sí | |||||||||
AllowSharedCaching | Esta clave controla el almacenamiento en caché de contenido que no pertenece a iCloud, como las actualizaciones de software y las apps. Al menos una de las claves de AllowPersonalCaching o AllowSharedCaching debe ser sí. | Sí | |||||||||
AllowWirelessPortable | Permite que los ordenadores Mac portátiles que solo tengan conexiones de red Wi-Fi ejecuten el almacenamiento en caché de contenido. | Sí | |||||||||
CacheLimit | Especifica el número máximo de bytes de espacio de almacenamiento usado para la caché de contenido. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | 0 (ilimitado) | |||||||||
DatabaseUpdateInterval | Especifica la frecuencia con la que la caché de contenido guarda los cambios en su base de datos en el almacenamiento. Si se aumenta el intervalo, el riesgo de perder contenido almacenado en caché tras un fallo eléctrico es mayor. El máximo es 3.600 segundos (1 hora). Un intervalo de 0 significa que la base de datos se actualiza siempre de inmediato, lo cual reduce el rendimiento. | 5 (segundos) | |||||||||
DataPath | Especifica la ruta al directorio usado para almacenar en caché el contenido. Si se cambia este ajuste manualmente no se moverá automáticamente a la nueva ubicación el contenido almacenado en caché. Para mover el contenido automáticamente, usa el panel de ajustes “Almacenamiento en caché de contenido”. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | /Library/Application Support/Apple/AssetCache/Data | |||||||||
DisplayAlerts | Muestra las notificaciones de las alertas de almacenamiento en caché de contenido. Activa esta función para contar con la mejor eficacia de almacenamiento de caché de contenido. | No | |||||||||
DownloadMinRate | Especifica el número mínimo de bytes por segundo que los clientes deben sostener durante la descarga de contenido desde la caché de contenido. La caché de contenido detendrá las descargas que transfieran datos a una velocidad inferior a esta. El mínimo restringido es de 1000 bytes por segundo. | 8000 (bytes por segundo) | |||||||||
DownloadTimeout | Especifica el tiempo, en segundos, que se permite que una descarga esté activa desde un cliente antes de abandonar. El mínimo restringido es de 10 segundos. | 180 (segundos) | |||||||||
ImportMaxRate | Especifica el número máximo de bytes por segundo al que la caché de contenido recibe datos de cada cliente. Un valor de 0 indica un número ilimitado de bytes por segundo. | 0 (bytes por segundo) | |||||||||
ImportMinRate | Especifica el número mínimo de bytes por segundo que los clientes deben sostener durante la importación (carga) de contenido. La caché de contenido detendrá las importaciones que transfieran datos a una velocidad inferior a esta. La velocidad mínima es de 100 bytes por segundo. | 2000 (bytes por segundo) | |||||||||
ImportRateAttenuation | Especifica el porcentaje de atenuación añadido al tiempo de carga. El valor mínimo restringido es de un 0% de atenuación. Los valores demasiado elevados superan el valor de ImportTimeout y producen errores. | .20 (porcentaje) | |||||||||
ImportTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una importación (carga) desde un cliente antes de abandonar. El mínimo es 10 segundos. | 300 (segundos) | |||||||||
Interface | Especifica el nombre BSD de una interfaz de red para su uso por parte de la caché de contenido. Por ejemplo, en0. Además, siempre escucha en la interfaz de loopback (localhost). | Escuchar en la interfaz seleccionada | |||||||||
KeepAwake | Mantiene el ordenador activo mientras el almacenamiento en caché está activado. Activa esta función para contar con la mejor disponibilidad de almacenamiento de caché de contenido. Selecciona la opción “Impedir que el ordenador entre en reposo automáticamente cuando se apaga la pantalla” en “Ahorro de energía” en Ajustes del Sistema (en macOS 13 o posterior) o en Preferencias del Sistema (en macOS 12.0.1 o anterior). | No | |||||||||
ListenRanges | Matriz de diccionarios que describen el intervalo de direcciones IP a servir. Consulta a continuación un ejemplo que usa la clave ListenRanges. La subclave de tipo ya no es necesaria y se ignora en caso de estar presente. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | none | |||||||||
ListenRangesOnly | Si ListenRangesOnly es “true” (verdadero), la caché de contenido proporciona contenido solo a los clientes en los intervalos especificados por la clave ListenRanges. Si quieres usar la clave ListenRangesOnly, también debes especificar la clave ListenRanges. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | No | |||||||||
ListenWithPeers AndParents | Indica si el almacenamiento en caché de contenido se registra con la unión de las claves ListenRanges, PeerListenRanges y Parents, o solo con la clave ListenRanges. Ten en cuenta que ListenRanges se podría generar automáticamente desde LocalSubnetsOnly y que PeerListenRanges se podría generar automáticamente desde PeerLocalSubnetsOnly. | El valor por omisión depende de la historia del ordenador:
| |||||||||
LocalSubnetsOnly | Indica si la caché de contenido debe ofrecer contenido únicamente a los clientes que se encuentren en la misma red local inmediata que la propia caché de contenido, en vez de a los clientes de todas las redes locales accesibles para la caché de contenido. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | Sí | |||||||||
LogClientIdentity | Esta clave determina si la caché de contenido debe registrar la dirección IP y el número de puerto de los clientes que solicitan contenido. | No | |||||||||
MaxConcurrentClients | Especifica el número máximo de clientes que puede admitir una caché de contenido. Apple no garantiza que una caché de contenido pueda alcanzar los 3400 clientes simultáneos. | 3400 | |||||||||
MaxParentDepth | Especifica el número de veces máximo, para una sola solicitud, que una caché de contenido secundaria reenvía la solicitud a una principal. Si una solicitud es demasiado profunda (la cadena de reenvío es demasiado larga), el sistema le impone que vaya al origen, en lugar de hacerlo a una principal. | 8 | |||||||||
MaxPeersToQuery | Especifica el número máximo de cachés de contenido del mismo nivel a las que solicitar contenido. | 0 (ilimitado) | |||||||||
MetricsInterval | Especifica la frecuencia, en segundos, con que se añade una fila de valores métricos a la base de datos métricos en /Biblioteca/Application Support/Apple/AssetCache/Metrics/Metrics.db.
Restringido entre 1 y 60 segundos, ambos inclusive. Puedes ver estas métricas en el panel Caché de Monitor de Actividad. | 60 (segundos) | |||||||||
MetricsMaxAge | Las mediciones que sean más antiguas que este valor se eliminan de la base de datos de métricas, una vez al día. El mínimo restringido es de 30 días. | 30 (días) | |||||||||
OriginDownloadTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una descarga desde los servidores de Apple antes de desistir (y, posiblemente, antes de volver a intentar la descarga). Restringido entre 5 y 300 segundos, ambos inclusive. | 60 | |||||||||
OriginUploadTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una carga a un servidor de origen antes de abandonar. Restringido entre 5 y 3600 segundos, ambos inclusive. | 600 | |||||||||
ParentDownloadTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una descarga desde una caché de contenido principal antes de desistir (y, posiblemente, volver a intentar la descarga). Restringido entre 5 y 300 segundos, ambos inclusive. | 60 | |||||||||
ParentRetryInterval | Especifica el tiempo de espera, en segundos, durante el cual se van a pasar por alto las cachés de contenido principales cuando hayan acumulado cinco fallos de red o errores del servidor consecutivos. Restringido entre 30 y 3.600 segundos, ambos inclusive. | 900 | |||||||||
Parents | Una lista de las direcciones IP locales de otras cachés de contenido desde las cuales esta caché debe descargar o cargar contenido en lugar de hacerlo directamente desde Apple. Las direcciones no válidas y las de ordenadores que no sean cachés de contenido se pasarán por alto. Las cachés principales que dejen de estar disponibles se omitirán de acuerdo con ParentRetryInterval. Si todas las cachés de contenido principales dejan de estar disponibles, la caché de contenido descargará desde o cargará en Apple directamente hasta que vuelva a haber una disponible. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | none | |||||||||
ParentSelectionPolicy | La política que se debe usar a la hora de seleccionar entre más de una caché de contenido principal configurada. Con cada política, se omitirán las cachés principales que dejen de estar disponibles temporalmente. Las políticas son:
También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | round-robin | |||||||||
ParentUploadTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una carga a una caché de contenido principal antes de abandonar. Restringido entre 5 y 3600 segundos, ambos inclusive. | 600 | |||||||||
PeerDownloadTimeout | Especifica el tiempo, en segundos, que se permite que esté inactiva una descarga desde una caché de contenido del mismo nivel antes de desistir (y, posiblemente, volver a intentar la descarga). Restringido entre 5 y 300 segundos, ambos inclusive. | 30 | |||||||||
PeerFilterRanges | Cuando PeerFilterRanges es una matriz (de entradas como las de ListenRanges), la caché de contenido filtra y ordena su lista de pares según los intervalos de la matriz. La caché de contenido solo realiza consultas a las cachés del mismo nivel que estén en PeerFilterRanges. El filtrado y la ordenación se aplican antes de truncar la lista de servidores del mismo nivel en las entradas de MaxPeersToQuery (si dicho ajuste está presente). Cuando PeerFilterRanges sea una matriz vacía, la caché de contenido no consultará a ninguna caché del mismo nivel. Cuando PeerFilterRanges tiene el valor booleano “true” (verdadero), la caché de contenido hace lo mismo que en el caso anterior, pero usa el valor de ListenRanges en lugar del valor de PeerFilterRanges. Cuando PeerFilterRanges es cualquier otro tipo o el valor no está presente, la caché de contenido ni filtra ni ordena su lista de pares antes de truncar la lista en las entradas de MaxPeersToQuery. PeerFilterRanges solo afecta a la lista de otras cachés de contenido a las que esta caché realiza consultas de contenido y descargas. No tiene efecto en las solicitudes entrantes de contenido de ninguna otra caché de contenido. La subclave de tipo ya no es necesaria y se ignora en caso de estar presente. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | none | |||||||||
PeerListenRanges | Cuando PeerListenRanges sea una matriz de diccionarios en la que cada diccionario representa un intervalo de direcciones IP, la caché de contenido solo responde correctamente a las consultas de caché del mismo nivel procedentes de la cachés de contenido que tengan una dirección IP incluida en esta matriz de intervalos. Cuando PeerListenRanges sea una matriz vacía, la caché de contenido responde con un error a las consultas de caché procedentes de cualquier otra caché de contenido. Cuando PeerListenRanges tenga el valor booleano “true” (verdadero), la caché de contenido utiliza el valor ListenRanges en lugar del valor PeerListenRanges para decidir de qué otras cachés de contenido responden las consultas de caché. Cuando PeerListenRanges sea de cualquier otro tipo o el valor no está presente, la caché de contenido responde correctamente a las consultas de caché procedentes de todas las demás cachés de contenido. PeerListenRanges solo afecta a las cachés de contenido de las que esta caché de contenido responde correctamente a las consultas de caché. No tiene efecto en la lista de cachés del mismo nivel a las que esta caché de contenido consulta por contenido y de las que lo descarga. Cuando una caché de contenido responde con un error a una consulta de caché, la caché de contenido que realiza la consulta marca la caché de contenido que responde como “no compatible”, y no intenta consultarla de nuevo hasta que haya transcurrido el intervalo PeerRetryInterval. La subclave de tipo ya no es necesaria y se ignora en caso de estar presente. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | none | |||||||||
PeerLocalSubnetsOnly | Indica si la caché de contenido solo debe considerarse del mismo nivel a otras cachés de contenido de la misma red local inmediata, en vez de a las cachés de contenido que utilicen la misma dirección IP pública que este ordenador. Cuando PeerLocalSubnetsOnly tiene el valor “true” (verdadero), la caché de contenido solo consulta y responde correctamente a las consultas de cachés del mismo nivel procedentes de cachés de contenido que se encuentren en la misma red local inmediata. Cuando el valor de PeerLocalSubnetsOnly sea “true” (verdadero), sustituirá la configuración de PeerFilterRanges y PeerListenRanges. Cuando el valor de PeerLocalSubnetsOnly es “false” (falso), la caché de contenido deriva a PeerFilterRanges y PeerListenRanges para configurar las restricciones de pares. Cuando el valor de PeerLocalSubnetsOnly es verdadero y la red cambia, las restricciones aplicadas a los pares de la red local se actualizan de la forma correspondiente. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | Sí | |||||||||
PeerNotifyTimeout | Especifica el tiempo de espera, en segundos, para que las cachés de contenido del mismo nivel respondan al hacerles ping en el arranque. Restringido entre 5 y 300 segundos, ambos inclusive. | 30 | |||||||||
PeerQueryTimeout | Especifica el tiempo de espera, en segundos, para que las cachés de contenido del mismo nivel respondan cuando se les consulta sobre su contenido. Restringido entre 1 y 60 segundos, ambos inclusive. | 5 | |||||||||
PeerRetryInterval | Especifica el tiempo de espera, en segundos, que ignorar a las cachés de contenido del mismo nivel cuando hayan acumulado tres notificaciones o consultas fallidas consecutivas. Cuando haya transcurrido el intervalo de tiempo para el reintento, las cachés de contenido del mismo nivel se restaurarán en la lista de pares para realizar consultas de contenido. Restringido entre 30 y 3.600 segundos, ambos inclusive. | 900 (segundos) | |||||||||
PersonalCacheLimit | Limita la cantidad de espacio de almacenamiento (en bytes) que utiliza la caché de contenido para los datos de iCloud almacenados en caché. El valor de PersonalCacheLimit no debe superar el valor de CacheLimit. | 0 (ilimitado) | |||||||||
PruneAffinitiesAge | Las afinidades de usuario que tengan más días de los especificados se eliminan automáticamente de la caché de afinidades. Las afinidades de usuario proporcionan información a los clientes sobre el lugar de almacenamiento en caché de su contenido a fin de mejorar el rendimiento. La eliminación de afinidades de usuarios no afecta al contenido almacenado en caché. El mínimo restringido es de 7 días. | 30 (días) | |||||||||
PruneAffinitiesInterval | Especifica la frecuencia, en días, con que la caché de contenido debe buscar y eliminar afinidades de usuarios que tengan más días que PruneAffinitiesAge. Las afinidades de usuario, que solo utiliza iCloud, proporcionan información a los clientes sobre el lugar de almacenamiento en caché de su contenido a fin de mejorar el rendimiento. La eliminación de afinidades de usuarios no afecta al contenido almacenado en caché. El mínimo restringido es de 1 día. | 7 (días) | |||||||||
PruneAssetsAge | El contenido no solicitado durante este número de días se elimina automáticamente de la caché de contenido. El mínimo restringido es de 7 días. | 120 (días) | |||||||||
PruneAssetsInterval | Especifica la frecuencia, en días, con que la caché de contenido debe buscar y eliminar contenido que tenga más días que PruneAssetsAge. El mínimo restringido es de 1 día. | 7 (días) | |||||||||
PublicRanges | Especifica los intervalos de direcciones IP públicas que deben utilizar los servidores de nube para asociar los clientes con las cachés de contenido. También puedes configurar este valor en el panel de ajustes “Almacenamiento en caché de contenido”. | no es el valor por omisión | |||||||||
Puerto | Especifica el número de puerto TCP en el que el almacenamiento en caché de contenido acepta solicitudes de carga o descarga. | 0 (usar un puerto aleatorio) | |||||||||
ReservedVolumeSpace | Especifica el número mínimo de bytes de espacio de almacenamiento libre que se tienen que dejar para el volumen que guarda los activos almacenados en caché. | 2000000000 (2 GB) | |||||||||
TerminationTimeout | Especifica el tiempo, en segundos, durante el que la caché de contenido debe intentar anular el registro cuando se está deteniendo. Al anular el registro se informa a los clientes de que la caché de contenido ya no está disponible para que no intenten utilizarlo otra vez (o hasta que la caché de contenido se vuelva a iniciar). Restringido entre 1 y 60 segundos, ambos inclusive. | 10 (segundos) | |||||||||
Verbose | Si Verbose = true, la caché de contenido registra un poco más de información sobre sus actividades. El registro incrementado puede reducir el rendimiento. Este ajuste no se recomienda para su uso a largo plazo. Usar el comando Por ejemplo: También puedes utilizar la app Consola para ver los registros. | No |
Ejemplo de tecla ListenRanges
Puedes utilizar la clave ListenRanges para especificar las cachés de contenido preferidas en topologías de red avanzadas, en las que se utilizan varias cachés de contenido con la misma dirección IP pública.
Por ejemplo:
caching1.betterbag.com usa la clave ListenRanges para especificar un intervalo desde 10.0.0.1 a 10.0.0.254 y desde 10.1.0.1 a 10.1.0.254 y define la clave ListenRangesOnly en No.
caching2.betterbag.com usa la clave ListenRanges para especificar un intervalo de 10.1.0.1 a 10.1.0.39 (observa el solapamiento con el segundo intervalo de caching1) y define la clave ListenRangesOnly en No.
Si un cliente cuya dirección IP es 10.0.0.10 solicita contenido, se le dirige a caching1.
Si un cliente cuya dirección IP es 10.1.0.10 solicita contenido, se le dirige a caching1 o a caching2, seleccionadas de forma aleatoria.
Si un cliente cuya dirección IP es 10.2.0.10 solicita contenido, se le dirige a caching1 o a caching2, seleccionadas de forma aleatoria.
Si caching1 se ha apagado o sufre una pérdida de alimentación eléctrica, pero caching2 sigue disponible, se dirige a todos los clientes a caching2.
Archivo plist de ejemplo
A continuación se muestra un archivo /Librería/Preferences/com.apple.AssetCache.plist de ejemplo.
<?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>