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 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 es visible para ti, 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 aumentar más allá de la memoria adicional que aprovisionamos para este propósito.

Cuando el uso de memoria supera la memoria total del sistema de Memorystore, una condición de memoria insuficiente (OOM) puede provocar un vaciado completo 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 configuras una instancia de Memorystore para Memcached. En las secciones, también se explican las métricas y las alertas que puedes usar para supervisar la memoria, así como 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, ya que 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, 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 para que tu instancia de Memcached la use 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 los elementos almacenados en la caché para dejar espacio para las escrituras nuevas.

Ten en cuenta que, cuando veas la métrica de memoria caché, la memoria caché informada para un nodo de 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 las losas.

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 ajusta 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 no tiene límites teóricos, por lo que puede crecer de forma infinita.

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, la memoria de un nodo vacío de Memorystore para Memcached se ve como el 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 no está limitado, parte de la sobrecarga de algunas cargas de trabajo supera el límite reservado, como se muestra a continuación:

marcador de posición

Cuando la sobrecarga y los elementos llenan todo el espacio disponible, Memcached se queda sin memoria y el SO debe finalizar el proceso, lo que provoca un vaciado completo 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 el alto uso de memoria del sistema). En este caso, 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, debes aumentar la memoria reservada, lo que reduce la memoria caché disponible. Debes agregar este espacio adicional si tu instancia experimenta presión de memoria causada por una sobrecarga de memoria alta.

Las instancias creadas después del 25 de octubre de 2021 tienen un porcentaje predeterminado de memoria reservada del 10%. Puedes anular este valor actualizando la configuración de forma manual en tu instancia. Si disminuyes la memoria reservada en tu instancia, puede aumentar 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 expulsar elementos.

marcador de posición

Una vez que comiences a usar la instancia, según la métrica de Utilización de memoria del sistema, es posible que debas aumentar la memoria reservada en tu 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 la memoria del sistema

La memoria del sistema es igual a la capacidad de la 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 sobrecarga de memoria) en comparación con la memoria del sistema. Es una métrica fundamental para supervisar, ya que te muestra qué tan cerca estás de completar 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 mayor uso de la memoria del sistema y que te convenga aumentar de forma preventiva la memoria reservada 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 la utilización de memoria del sistema es alta, debes supervisar la métrica de utilización de memoria del sistema con más detalle y, si aumenta de forma considerable, 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 tener que lidiar con un vaciado de caché causado 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é. Si deseas obtener instrucciones para inhabilitar las expulsiones de caché, consulta Configura instancias de Memcached.

En Supervisión de expulsiones, se muestra 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 desalojos, aumentar la escala de tu instancia puede generar un aumento en la tasa de aciertos de caché.

Si las expulsiones no están habilitadas y tu caché está completamente llena, es posible que falle la configuración de elementos en tu servidor de 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é devuelve 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 las 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

Administra el uso de la memoria del sistema

Si tu instancia experimenta presión de memoria o se queda sin errores de memoria, 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.

Cómo verificar una condición de OOM

Cuando tu instancia alcanza una condición de OOM, el primer indicador es el reinicio de la instancia. Para ver si un reinicio se debe a una condición de OOM, consulta las métricas de 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%.

Si deseas obtener instrucciones para ajustar la configuración de memoria reservada, consulta Configura instancias de Memcached.

Aumentar la memoria reservada reduce la memoria disponible para almacenar elementos, lo que hace que la expulsión de elementos ocurra antes. Esto puede reducir la tasa de aciertos de caché de tu instancia. Los elementos no se expulsan 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 fragmentar las claves en 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 verifica periódicamente si hay claves vencidas y las quita, lo que libera espacio en tu servidor y evita una mayor asignación de memoria caché.

Borra las claves de tu instancia de forma manual

Debes considerar borrar claves cuando te enfrentes a presión de memoria. Sin embargo, dado que Memcached de código abierto no libera la memoria asignada previamente, borrar claves solo reduce la probabilidad de ingresar en una condición de OOM. Esto reduce la probabilidad, ya que las escrituras nuevas usan la memoria vacía. El aumento de la sobrecarga de memoria aún puede causar una condición de OOM, ya que la memoria asignada previamente se dedica a almacenar elementos y no se puede usar para la sobrecarga.