Prácticas recomendadas para gestionar la memoria

En esta página se explica la configuración de Memoria reservada de 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 gestionar de forma eficaz la memoria de tu instancia de Memcached.

Memorystore añade memoria adicional a tu instancia, que no es visible para ti, para adaptarse a la sobrecarga creada por los procesos de Memcached. Sin embargo, en función de tu carga de trabajo específica, la sobrecarga de memoria puede ser mayor que la memoria adicional que proporcionamos para este fin.

Cuando el uso de memoria supera la memoria total del sistema Memorystore, se puede producir una condición de falta de memoria (OOM) que provoque un vaciado completo de los datos de la caché, lo que puede interrumpir tu aplicación y tu negocio.

En las siguientes secciones se describen los principios generales que se deben seguir al configurar una instancia de Memorystore para Memcached. En las secciones también se tratan las métricas y las alertas que puede usar para monitorizar la memoria, así como las acciones que puede llevar a cabo.

Conceptos de gestión de la memoria

Capacidad de instancia

La capacidad de la instancia es la cantidad de memoria que aprovisionas en GiB y por la que se te cobra. 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, tu instancia tendrá de forma predeterminada 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 información, consulta Memoria reservada. Cuando la memoria caché está llena, Memcached empieza a eliminar elementos almacenados en la caché para dejar espacio a nuevas escrituras.

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

Sobrecarga de memoria

La sobrecarga de memoria es la memoria utilizada por los procesos de Memcached. No incluye los elementos almacenados en la memoria para el almacenamiento en caché.

La sobrecarga de memoria se ajusta en función del número de conexiones activas, el número 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 infinitamente.

Para tener en cuenta la sobrecarga de memoria, Memorystore añade memoria adicional a tu instancia. Sin embargo, la cantidad de memoria adicional que añadimos no es visible para ti. En la mayoría de las cargas de trabajo, la sobrecarga de memoria no debería suponer un problema.

Sin ninguna configuración, la memoria de un nodo vacío de Memorystore para Memcached tiene un aspecto similar al del diagrama que se muestra a continuación.

marcador de posición

A medida que tu aplicación añade 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

Como el crecimiento de la sobrecarga no tiene límites, 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 sistema operativo debe finalizar el proceso, lo que provoca un vaciado completo de la caché:

marcador de posición

Puede que observes que la sobrecarga de memoria supera el espacio adicional que Memorystore asigna a la sobrecarga de forma predeterminada (como indica el valor alto de Utilización de memoria del sistema). En ese caso, aumenta el parámetro Memoria reservada para crear una sobrecarga adicional para tu carga de trabajo.

Memoria reservada

Memoria reservada es una configuración de Memorystore que te permite aumentar la cantidad de espacio disponible para usarlo con 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. Deberías añadir este espacio adicional si tu instancia experimenta una presión de memoria causada por una sobrecarga de memoria elevada.

Las instancias creadas después del 25 de octubre del 2021 tienen un porcentaje de memoria reservada predeterminado del 10%. Este valor se puede anular actualizando manualmente la configuración de tu instancia. Si reduces la memoria reservada de tu instancia, puede aumentar significativamente la probabilidad de que se produzcan condiciones de falta de memoria.

En el siguiente diagrama se muestra una instancia que ha creado espacio adicional para la sobrecarga de memoria aumentando la memoria reservada:

marcador de posición

Cuando la caché de Memcached alcanza este límite reducido, empieza a expulsar elementos.

marcador de posición

Una vez que empieces a usar la instancia, es posible que tengas que aumentar la memoria reservada en ella para admitir tu carga de trabajo máxima, en función de la métrica Utilización de memoria del sistema.

Para obtener más información, consulta Gestionar el uso de la 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 añade Memorystore para la sobrecarga de memoria.

Uso de la 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 que debes monitorizar, ya que muestra lo cerca que estás de llenar por completo la memoria del sistema disponible de tu instancia. A medida que la métrica Utilización de memoria del sistema se acerca al 100%, es más probable que la instancia experimente una condición de falta de memoria. Para asegurarte de que la instancia tenga suficiente memoria para admitir tu carga de trabajo, es importante que siempre haya 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 gestionar los elementos que se almacenan, es probable que veas una mayor utilización de la memoria del sistema. Además, puede que quieras aumentar la memoria reservada de forma preventiva para asegurarte de que tienes suficiente espacio para la sobrecarga.

Alertas de uso de memoria del sistema

Debes configurar una alerta para que te avise si la métrica Utilización de memoria del sistema supera el 90%. Si la utilización de la memoria del sistema es alta, debes monitorizar esta métrica más de cerca y, si aumenta considerablemente, plantearte tomar medidas para gestionar el uso de la 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 hacer frente a un vaciado de caché provocado por una condición de falta de memoria.

Política de desahucio

Memcached usa un algoritmo LRU optimizado para eliminar elementos una vez que se ha llenado la memoria caché. Para obtener instrucciones sobre cómo inhabilitar las expulsiones de caché, consulta el artículo Configurar instancias de Memcached.

Monitorización de desalojos: muestra el número de claves que Memcached elimina debido a limitaciones de tamaño. Los elementos que se eliminan debido al vencimiento del TTL no se incluyen en esta métrica. Si observas un gran número de desalojos, escalar tu instancia puede aumentar tu proporción de aciertos de caché.

Si las expulsiones no están habilitadas y la caché está completamente llena, es posible que no se puedan definir elementos en el servidor Memcached.

Tasa de resultados en caché

Debe monitorizar periódicamente la métrica de proporción de aciertos de caché para saber qué porcentaje de búsquedas de claves se devuelve correctamente mediante las claves de su instancia de Memcached. En general, una proporción de aciertos en caché más alta es mejor que una más baja, ya que significa que la caché devuelve más solicitudes de caché.

Debes anotar tu proporción de aciertos de caché antes de hacer cambios de configuración importantes, como ajustar la memoria reservada, ajustar los TTL de las claves o escalar tu instancia. Después de modificar la instancia, vuelve a comprobar la proporción de aciertos de caché para ver cómo ha afectado el cambio a esta métrica.

Monitorizar el uso de memoria de una instancia

Las siguientes métricas te permiten conocer el uso de memoria de tu instancia. Para saber cómo ver las métricas y configurar alertas, consulte Monitorizar instancias de Memcached.

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

Gestionar el uso de memoria del sistema

Si tu instancia tiene problemas de memoria o se producen errores de falta de memoria, sigue estos pasos para resolver el problema:

  1. Verificar una condición de falta de memoria.
  2. Aumenta la memoria reservada de tu instancia.
  3. Aumenta la escala de la instancia.
  4. Definir TTLs en claves volátiles.
  5. Elimina manualmente las claves de tu instancia.
  6. Si sigues teniendo problemas de falta de memoria, ponte en contacto con el equipo de Asistencia de Google Cloud Platform.

Verificar una condición de falta de memoria

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

Si la utilización de la memoria del sistema era superior al 90% antes de que el tiempo de actividad se redujera a cero, significa que es probable que el reinicio de la instancia se haya debido a una condición de falta de memoria.

Aumentar la memoria reservada

Si aumentas la memoria reservada, habrá más espacio para la sobrecarga de memoria. Para ello, reduce el límite de memoria caché de tu instancia. Deberías aumentar la memoria reservada si la métrica de utilización de la memoria del sistema supera el 90%.

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

Si aumentas la memoria reservada, se reduce la memoria disponible para almacenar elementos, lo que provoca que los elementos se eliminen antes. Esto puede reducir la proporción de aciertos de caché de tu instancia. Los elementos no se expulsan si has inhabilitado las expulsiones.

Escalar verticalmente la instancia

Sigue las instrucciones que se indican en Escalar instancias de Memcached para aumentar el número 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 el número de claves almacenadas en cada nodo.

Definir TTLs en claves volátiles

Configura tu aplicación para definir TTLs en las claves almacenadas en Memcached. De forma predeterminada, Memcached comprueba periódicamente si hay claves caducadas y las elimina, lo que libera espacio en tu servidor y evita que se asigne más memoria caché.

Eliminar manualmente las claves de tu instancia

Deberías plantearte eliminar claves cuando haya problemas de memoria. Sin embargo, como Memcached de código abierto no libera la memoria asignada anteriormente, eliminar claves solo reduce la probabilidad de que se produzca una condición de falta de memoria. Se reduce la probabilidad porque las nuevas escrituras usan la memoria vacía. El aumento de la sobrecarga de memoria puede seguir provocando una condición de falta de memoria porque la memoria asignada anteriormente se dedica a almacenar elementos y no se puede usar para la sobrecarga.