Prácticas recomendadas para la administración de la memoria

En esta página, se explica la configuración de la memoria reservada para tu instancia de Memcached y cuándo aumentar la memoria reservada si es necesario. En esta página, también se explican las otras prácticas recomendadas que debes conocer para administrar de manera eficaz la memoria de tu instancia de Memcached.

Memorystore agrega memoria adicional a tu instancia, que no puedes ver, para adaptarse a la sobrecarga creada por los procesos de Memcached. Sin embargo, según tu carga de trabajo específica, la sobrecarga de memoria puede ser mayor que la memoria adicional que aprovisionamos para este fin.

Cuando el uso de memoria supera la memoria total del sistema de Memorystore, una condición de memoria insuficiente (OOM) puede provocar una limpieza completa de la caché de datos, lo que puede interrumpir tu aplicación y tu empresa.

En las siguientes secciones, se describen los principios generales que debes seguir cuando configures una instancia de Memorystore para Memcached. En las secciones, también se describen las métricas y las alertas que puedes usar para supervisar la memoria, y se explican las acciones que puedes realizar.

Conceptos de administración de memoria

Capacidad de la instancia

La capacidad de la instancia es la cantidad de memoria que se aprovisiona en GiB, y por la que se te factura. La memoria caché no es lo mismo que la capacidad de la instancia porque no es fija. Sin embargo, cuando creas tu instancia de Memcached, la capacidad de la instancia es igual a la memoria de caché de forma predeterminada.

Por ejemplo, si eliges una capacidad de instancia de 5 GiB, de forma predeterminada, tu instancia tendrá 5 GiB de espacio para almacenar elementos.

Límite de memoria caché

La memoria caché es el tamaño total de la memoria disponible que puede usar tu instancia de Memcached como caché. De forma predeterminada, la memoria de caché es igual a la capacidad de tu instancia. Sin embargo, ajustar la memoria reservada puede reducir la memoria caché. Para obtener más detalles, consulta Memoria reservada. Una vez que la memoria caché está llena, Memcached comienza a expulsar los elementos almacenados en la caché para dejar espacio para nuevas operaciones de escritura.

Ten en cuenta que, cuando veas la métrica de memoria caché, la memoria caché informada para un nodo Memcached solo incluye el espacio ocupado por los elementos. Esto significa que Memcached puede subestimar el uso total de la memoria caché. La caché puede asignar memoria adicional como fragmentación dentro de los fragmentos.

Sobrecarga de memoria

La sobrecarga de memoria es la memoria que usan los procesos de Memcached. No incluye los elementos almacenados en la memoria para la caché.

La sobrecarga de memoria se escala según la cantidad de conexiones activas, la cantidad total de elementos y el tamaño de los elementos. Además, la sobrecarga de memoria es teóricamente ilimitada, por lo que tiene el potencial de crecer infinitamente.

Para tener en cuenta la sobrecarga de memoria, Memorystore agrega memoria adicional a tu instancia. Sin embargo, no puedes ver la cantidad de memoria adicional que agregamos. Para la mayoría de las cargas de trabajo, la sobrecarga de memoria no debería ser un problema.

Sin ninguna configuración, un Memorystore vacío para la memoria del nodo de Memcached se ve como el diagrama que se muestra a continuación.

marcador de posición

A medida que tu aplicación agrega elementos a la caché, Memcached acumula sobrecarga para procesos como los búferes de conexión y la tabla hash interna:

marcador de posición

Dado que el crecimiento de la sobrecarga no tiene límites, la sobrecarga de algunas cargas de trabajo crece más allá del límite reservado, como se muestra a continuación:

marcador de posición

Cuando la sobrecarga y los elementos ocupan todo el espacio disponible, Memcached se queda sin memoria y el SO debe finalizar el proceso, lo que provoca una limpieza completa de la caché:

marcador de posición

Es posible que observes que la sobrecarga de memoria crece más allá del espacio adicional que Memorystore asigna para la sobrecarga de forma predeterminada (como lo indica un valor alto de Uso de memoria del sistema). En esta circunstancia, aumenta el parámetro de memoria reservada para crear una sobrecarga adicional para tu carga de trabajo.

Memoria reservada

La memoria reservada es una configuración de Memorystore que te permite aumentar la cantidad de espacio disponible que puede usar la sobrecarga de memoria.

Para aumentar la memoria disponible para la sobrecarga de memoria, aumenta la memoria reservada, lo que reduce la memoria de caché disponible. Debes agregar este espacio adicional si tu instancia experimenta presión de memoria debido a una sobrecarga de memoria alta.

Las instancias creadas después del 25 de octubre de 2021 tienen un porcentaje de memoria reservada predeterminado del 10%. Para anular este valor, actualiza la configuración de forma manual en tu instancia. Si disminuyes la memoria reservada en tu instancia, es posible que aumente significativamente la probabilidad de que se produzcan condiciones de OOM.

En el siguiente diagrama, se muestra una instancia que creó espacio adicional para la sobrecarga de memoria aumentando la memoria reservada:

marcador de posición

Una vez que la caché de Memcached alcanza este límite reducido, comienza a desalojar elementos.

marcador de posición

Una vez que comiences a usar la instancia, según la métrica Uso de memoria del sistema, es posible que debas aumentar la memoria reservada en la instancia para admitir tu carga de trabajo máxima.

Para obtener más detalles, consulta Cómo administrar el uso de la memoria del sistema.

Uso de memoria del sistema

La memoria del sistema es igual a la capacidad de tu instancia aprovisionada más el espacio adicional que agrega Memorystore para la sobrecarga de memoria.

El uso de memoria del sistema es una métrica que muestra el porcentaje de toda la memoria utilizada (elementos almacenados más la sobrecarga de memoria) en comparación con la memoria del sistema. Es una métrica fundamental que debes supervisar, ya que te muestra qué tan cerca estás de llenar por completo la memoria del sistema disponible para tu instancia. A medida que la métrica de uso de memoria del sistema se acerca al 100%, es más probable que la instancia experimente una condición de OOM. Para garantizar que la instancia tenga suficiente memoria para admitir tu carga de trabajo, es importante que siempre tengas suficiente memoria del sistema disponible.

En el caso de las cargas de trabajo que intentan llenar la caché por completo y dependen de las expulsiones de Memcached para administrar qué elementos se almacenan, es probable que veas un uso más alto de la memoria del sistema y que desees aumentar la memoria reservada de forma preventiva para garantizar que tengas suficiente espacio para la sobrecarga.

Alertas para el uso de memoria del sistema

Debes configurar una alerta para que te notifique si la métrica de uso de memoria del sistema supera el 90%. Si el uso de memoria del sistema es alto, debes supervisar la métrica de uso de memoria del sistema con más detalle y, si aumenta de forma significativa, debes considerar tomar medidas para administrar el uso de memoria del sistema. Es importante tomar medidas cuando la utilización de la memoria del sistema alcanza niveles altos, ya que te da tiempo para mitigar el problema en lugar de lidiar con una limpieza de caché causada por una condición de OOM.

Política de expulsión

Memcached usa un algoritmo LRU optimizado para desalojar elementos una vez que hayan llenado la memoria caché. Si deseas obtener instrucciones para inhabilitar las expulsiones de caché, consulta Configura instancias de Memcached.

Supervisa las expulsiones para ver la cantidad de claves que Memcached quita debido a limitaciones de tamaño. Los elementos que se quitan debido al vencimiento del TTL no se incluyen en esta métrica. Si observas una gran cantidad de expulsiones, aumentar la escala de tu instancia podría aumentar la tasa de aciertos de caché.

Si no se habilitan las expulsiones y la caché está completamente llena, es posible que falle la configuración de elementos en el servidor Memcached.

Tasa de aciertos de caché

Debes supervisar con frecuencia la métrica de proporción de aciertos de caché para saber qué porcentaje de búsquedas de claves muestra las claves en tu instancia de Memcached de forma correcta. En términos generales, una proporción de aciertos de caché alta es mejor que una proporción de aciertos de caché más baja, ya que significa que tu caché muestra más solicitudes de caché.

Debes tener en cuenta tu proporción de aciertos de caché antes de realizar cualquier cambio importante en la configuración, como ajustar la memoria reservada, ajustar los TTL de claves o escalar la instancia. Luego, después de modificar tu instancia, vuelve a verificar la proporción de aciertos de caché para ver cómo el cambio afectó a esta métrica.

Supervisa el uso de memoria de tu instancia

Las siguientes métricas te brindan estadísticas sobre el uso de memoria de tu instancia. Para aprender a ver las métricas y configurar alertas, consulta Supervisa instancias de Memcached.

Métrica Dirección completa de la métrica
Memoria caché memcache.googleapis.com/node/cache_memory
Uso de memoria del sistema memcache.googleapis.com/node/memory/utilization
Tasa de aciertos de caché memcache.googleapis.com/node/hit_ratio
Expulsiones memcache.googleapis.com/node/eviction_count

Cómo administrar el uso de memoria del sistema

Si tu instancia experimenta presión de memoria o se queda sin errores de OOM, sigue los pasos que se indican a continuación para resolver el problema:

  1. Verifica una condición de OOM.
  2. Aumenta la memoria reservada en tu instancia.
  3. Escala verticalmente la instancia.
  4. Establece TTL en claves volátiles.
  5. Borra las claves de tu instancia de forma manual.
  6. Si aún tienes condiciones de OOM, comunícate con el equipo de Asistencia de Google Cloud Platform.

Verifica una condición de OOM

Cuando tu instancia alcanza una condición de OOM, el primer indicador es un reinicio de la instancia. Para ver si un reinicio se debe a una condición de OOM, consulta las métricas Tiempo de actividad y Uso de memoria del sistema.

Si el uso de memoria del sistema superó el 90% antes de que el tiempo de actividad se reduzca a cero, es probable que el reinicio de la instancia se deba a una condición de OOM.

Aumenta la memoria reservada

Aumentar la memoria reservada crea más espacio para la sobrecarga de memoria. Para ello, reduce el límite de memoria caché de tu instancia. Debes aumentar la memoria reservada si la métrica de uso de memoria del sistema supera el 90%.

Para obtener instrucciones sobre cómo ajustar la configuración de memoria reservada, consulta Configura instancias de Memcached.

Si aumentas la memoria reservada, se reduce la memoria disponible para almacenar elementos, lo que provoca que la expulsión de elementos se produzca antes. Esto puede reducir la tasa de aciertos de caché de tu instancia. Los elementos no se desalojan si tienes inhabilitadas las expulsiones.

Escala verticalmente la instancia

Sigue las instrucciones en Escala instancias de Memcached para aumentar la cantidad de nodos. Si tu aplicación está configurada para particionar las claves entre los nodos, esto aumenta el espacio de almacenamiento general de elementos disponible para tu aplicación y reduce la cantidad de claves almacenadas en cada nodo individual.

Establece TTL en claves volátiles

Configura tu aplicación para establecer TTL en las claves almacenadas en Memcached. De forma predeterminada, Memcached busca claves vencidas y las quita periódicamente, lo que libera espacio en el servidor y evita que se asigne más memoria de caché.

Borra claves de tu instancia de forma manual

Debes considerar borrar claves cuando tengas presión de memoria. Sin embargo, como Memcached de código abierto no libera la memoria asignada anteriormente, borrar las claves solo reduce la posibilidad de ingresar en una condición de OOM. Reduce la posibilidad porque las operaciones de escritura nuevas usan la memoria vacía. El aumento de la sobrecarga de memoria aún puede causar una condición de OOM porque la memoria asignada anteriormente se dedica a almacenar elementos y la sobrecarga no puede usarla.