Recomendaciones para la administración de memoria

En esta página, se explica la configuración de 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 otras prácticas recomendadas que debes conocer para administrar de manera efectiva la memoria de tu instancia de Memcached.

Memorystore agrega memoria adicional a la instancia, que no puedes ver, a fin de acomodar la sobrecarga que crean 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 propósito.

Cuando el uso de memoria es mayor que la memoria total del sistema de Memorystore, una condición de falta de memoria (OOM) puede provocar un vaciado completo de datos de caché, lo que puede interrumpir la aplicación y el negocio.

En las siguientes secciones, se describen los principios generales que se deben seguir cuando se configura una instancia de Memorystore para Memcached. En las secciones, también se abordan las métricas y alertas que puedes usar para supervisar la memoria y, además, 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 aprovisionas en GiB y lo que se te factura. La memoria caché no es la misma 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 caché de forma predeterminada.

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

Límite de memoria caché

La memoria caché es el tamaño total de memoria disponible para que tu instancia de Memcached la utilice como caché. De forma predeterminada, la memoria 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 elementos almacenados en la caché para hacer lugar a nuevas operaciones de escritura.

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

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 el almacenamiento en caché.

La sobrecarga de memoria se escala según la cantidad de conexiones activas, el total de elementos y su tamaño. Además, la sobrecarga de memoria no tiene límites, por lo que tiene el potencial de crecer de forma infinita.

Para compensar la sobrecarga de memoria, Memorystore agrega memoria adicional a tu instancia. Sin embargo, la cantidad de memoria adicional que agregamos no está visible para ti. Para la mayoría de las cargas de trabajo, la sobrecarga de memoria no debería ser problemática.

Sin ninguna configuración, la memoria de un nodo de Memorystore para Memcached vacío se parece al siguiente diagrama.

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 es ilimitado, parte de la sobrecarga de algunas cargas de trabajo aumenta 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 causa una limpieza completa de caché:

marcador de posición

Es posible que observes que la sobrecarga de memoria aumenta más allá del espacio adicional que Memorystore asigna a la sobrecarga de forma predeterminada (como lo indica el alto uso de memoria del sistema). En esta circunstancia, aumenta el parámetro de memoria reservada para crear una sobrecarga adicional para la 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 sobrecarga de memoria disponible, aumenta la memoria reservada, que reduce la memoria caché disponible. Deberías 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%. Este valor se puede anular si actualizas la configuración de forma manual en tu instancia. Disminuir la memoria reservada en tu instancia puede aumentar de forma significativa la probabilidad de condiciones de OOM.

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

marcador de posición

Una vez que la caché de Memcached alcanza este límite reducido, comienza a expulsar 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 respaldar la carga de trabajo máxima.

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

Uso de memoria del sistema

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

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

En el caso de las cargas de trabajo que intentan llenar la caché por completo y depender de los expulsiones de Memcached para administrar los elementos que se almacenan, observarás un uso de memoria del sistema más alto y te recomendamos aumentar la memoria reservada de forma preventiva a fin de garantizar que tienes suficiente espacio para la sobrecarga.

Alertas sobre el uso de memoria del sistema

Debes configurar una alerta para que te notifique si la métrica Uso de memoria del sistema supera el 90%. Si el uso de memoria del sistema es alto, debes continuar supervisando la métrica Uso de memoria del sistema con más detalle y, si aumenta de forma considerable, deberías considerar tomar medidas para administrar el uso de memoria del sistema. Es importante tomar medidas cuando el uso de memoria del sistema alcanza niveles altos porque te da tiempo para mitigar 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 expulsar elementos una vez que llenan la memoria caché. Para obtener instrucciones sobre cómo inhabilitar los desalojos de caché, consulta Configura instancias de Memcached.

En Supervisión de expulsiones, se muestra la cantidad de claves que Memcached quita debido a las limitaciones de tamaño. No se incluyen en esta métrica los artículos que se quitaron debido al vencimiento del TTL. Si observas una gran cantidad de expulsiones, el escalamiento vertical de tu instancia puede generar un aumento en la tasa de aciertos de caché.

Si los desalojos no están habilitados y tu caché está completamente llena, la configuración de elementos en tu servidor de Memcached puede fallar.

Tasa de aciertos de caché

Deberías supervisar de forma periódica la métrica de proporción de aciertos de caché para saber qué porcentaje de búsquedas de claves muestran correctamente las claves en tu instancia de Memcached. En términos generales, una proporción de aciertos de caché más alta es mejor que una proporción de aciertos de caché más baja porque significa que la caché muestra más solicitudes de caché.

Debes tomar nota de la proporción de aciertos de caché antes de realizar cualquier cambio importante en la configuración, como ajustar la memoria reservada, los TTL de las claves o el escalamiento de la instancia. Después de modificar la instancia, vuelve a verificar la tasa de aciertos de caché para ver cómo el cambio afectó 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 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 ejecuta errores de OOM, sigue los pasos que se indican a continuación para resolver el problema:

  1. Verifica una condición OOM.
  2. Aumenta la memoria reservada en la instancia.
  3. Escala verticalmente la instancia.
  4. Configura los 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 OOM

Cuando tu instancia alcanza una condición OOM, el primer indicador es un reinicio de instancia. Para ver si una condición OOM causa un reinicio, consulta las metrics 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.

Aumentar la memoria reservada

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

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

El aumento de la memoria reservada reduce la memoria disponible para almacenar elementos, lo que hace que la expulsión de elementos se produzca antes. Esto puede reducir la tasa de aciertos de caché de la instancia. Los elementos no se expulsan si tienes inhabilitada la opción de expulsión.

Escala verticalmente la instancia

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

Configurar TTL en claves volátiles

Configura tu aplicación para establecer los TTL en las claves almacenadas en Memcached. De forma predeterminada, Memcached verifica si hay claves vencidas y las quita, lo que libera espacio en tu servidor y evita que se siga asignando memoria caché.

Borra las claves de tu instancia de forma manual

Deberías considerar borrar las claves cuando te enfrentes a la presión de la memoria. Sin embargo, dado que Memcached de código abierto no libera memoria asignada previamente, borrar claves simplemente reduce la posibilidad de ingresar a una condición OOM. Esto reduce la posibilidad de que las escrituras nuevas usen la memoria vacía. La creciente sobrecarga de memoria puede causar una condición de OOM porque la memoria asignada previamente se dedica a almacenar elementos y no se puede usar por la sobrecarga.