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 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 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 ser mayor que 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 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 se deben seguir cuando se configura una instancia de Memorystore para Memcached. En las secciones, también se abarcan las métricas y las alertas que puedes usar para supervisar la memoria, y también 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 lo que se te cobra por eso. 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 caché de forma predeterminada.
Por ejemplo, si eliges una capacidad de instancia de 5 GiB, de forma predeterminada, tu instancia tiene 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 la use tu instancia de Memcached como caché. De forma predeterminada, la memoria caché es igual a la capacidad de la 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 se ve 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 escala según la cantidad de conexiones activas, los elementos totales y el tamaño del elemento. Además, la sobrecarga de memoria es teóricamente ilimitada, por lo que tiene el potencial de crecer de forma infinita.
Para tener en cuenta la sobrecarga de memoria, Memorystore agrega memoria adicional a tu instancia. Sin embargo, la cantidad de memoria adicional que agregamos no es 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 ve como el siguiente diagrama.

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:

Dado que el crecimiento de la sobrecarga es ilimitado, parte de la sobrecarga de algunas cargas de trabajo supera el límite reservado, como se muestra a continuació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 una limpieza completa de la caché:

Es posible que observes que la sobrecarga de memoria supera el espacio adicional que Memorystore asigna para la sobrecarga de forma predeterminada (como lo indica el uso elevado de memoria del sistema). En esta circunstancia, aumenta el parámetro de memoria reservada para crear la 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 caché disponible. Debes agregar este espacio adicional si tu instancia experimenta presión de memoria causada por una sobrecarga de memoria elevada.
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 tu instancia de forma manual. Disminuir la memoria reservada en tu instancia puede aumentar significativamente 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:

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

Una vez que comiences a usar la instancia, según la métrica de uso 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 Administra el uso de memoria del sistema.
Uso de memoria del sistema
La memoria del sistema es igual 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 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 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.
Para las cargas de trabajo que intentan llenar la caché por completo y dependen de las expulsiones de Memcached para administrar qué elementos se almacenan, debes esperar ver un uso de memoria del sistema más alto y, tal vez, quieras 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 el uso de memoria del sistema es alto, debes supervisar la métrica de uso de memoria del sistema más de cerca y, si aumenta de forma considerable, debes considerar tomar medidas para administrar el uso de memoria del sistema. Tomar medidas cuando el uso de memoria del sistema alcanza niveles altos es importante 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 las expulsiones de caché, consulta Configura instancias de Memcached.
La supervisión de las expulsiones muestra la cantidad de claves que Memcached quita debido a las limitaciones de tamaño. Los elementos que se quitan debido al vencimiento del TTL no se incluyen en esta métrica. Si ves una gran cantidad de expulsiones, escalar verticalmente la instancia puede generar un aumento en la tasa de aciertos de caché.
Si las expulsiones no están habilitadas y la caché está llena por completo, es posible que no se puedan configurar elementos en tu servidor de Memcached.
Tasa de aciertos de caché
Debes supervisar con frecuencia la métrica de tasa 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 tasa de aciertos de caché más alta es mejor que una más baja porque significa que tu caché muestra más solicitudes de caché.
Debes tener en cuenta tu tasa 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 tasa 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étricas relacionadas con la administración de memoria
| 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 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:
- Verifica una condición de OOM.
- Aumenta la memoria reservada en tu instancia.
- Escala verticalmente la instancia.
- Establece TTL en claves volátiles.
- Borra las claves de tu instancia de forma manual.
- 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, la primera señal es un 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%.
Para obtener instrucciones sobre cómo 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 el recuento de nodos. Si tu aplicación está configurada para fragmentar las claves en los nodos, esto aumenta el espacio de almacenamiento de elementos general 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 las 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 las claves cuando te enfrentes a la 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 a una condición de OOM. Reduce la posibilidad porque las escrituras 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 está dedicada a almacenar elementos y no se puede usar para la sobrecarga.