Recibí un informe de un usuario de Redis, y no estoy seguro de qué responder ya que no soy un experto en el área de Linux y su programador, sin embargo, nosotros (como el proyecto Redis) tenemos que resolver este tipo de problemas especialmente En el futuro, como con Redis Cluster, tendremos muchas instancias de Redis ejecutándose al mismo tiempo en un solo cuadro. Entonces estoy pidiendo ayuda aquí.
Problema:
- Kernel: "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP jue 15 abr 08:05:38 UTC 2010 x86_64 GNU / Linux"
- abundante RAM libre, ningún otro proceso realiza E / S significativas.
- Importante , ejecutarse en una gran instancia EC2, no en un servidor real. Nunca vi algo así en un entorno no virtualizado. La instancia de EC2 fue: "Instancia extragrande de memoria alta 17.1 GB de memoria, 6.5 ECU (2 núcleos virtuales con 3.25 unidades de cómputo EC2 cada uno), 420 GB de almacenamiento de instancia local, plataforma de 64 bits" .
Básicamente, una vez que reinicia una gran instancia de Redis, el sistema se volverá tan lento que ya no podrá escribir en el shell. Cuando Redis carga una instancia, usa el 100% de la CPU (carga los datos lo más rápido posible) y lee el archivo dump.rdb secuencialmente. La E / S no es particularmente alta ya que la carga está vinculada a la CPU, no a la E / S.
¿Por qué demonios una caja con dos CPU y mucha RAM, sin elementos intercambiados en el disco, básicamente debería dejar de funcionar con esta carga de trabajo?
Tengo la impresión de que esto tiene mucho que ver con el hecho de que es una instancia de EC2, por lo que está relacionada con la tecnología de virtualización utilizada, ya que cargo todas las veces conjuntos de datos Redis de 24 GB en mi caja sin ningún problema (incluso con otras instancias de Redis corriendo con alta carga).
Gracias por cualquier pista!
Salvatore
Editar : agregando algunos comentarios que recibí de Twitter:
de @ezmobius: @antirez lo primero que debe hacer es probarlo desde / mnt o las unidades efímeras locales para ver si tiene escasez de EBS, el segundo es asegurarse de que no sea la "primera penalización de escritura" (google) y si es así primero necesita dd 0 en el disco.
de @dvirsky: @antirez Estoy ejecutando muchas instancias de redis en exactamente tales nodos ec2. He notado cierta desaceleración en bgsave pero no este fenómeno.
fuente
He tenido el mismo problema en una instancia EC2. Probablemente no esté relacionado con Redis: ocurre cuando hay un IO alto (p. Ej., Cuando redis está cargando un archivo de volcado).
Eche un vistazo a este hilo en los foros de Amazon: https://forums.aws.amazon.com/thread.jspa?messageID=215406
He experimentado con diferentes núcleos / imágenes y ahora funciona bien (en un antiguo núcleo 2.6.21).
fuente
Debe verificar el robo de la CPU (
xx.x%st
en el lado derecho de la línea de la CPU) que setop
muestra cuando experimenta la carga del 100% y el shell congelado. Steal representa la cantidad de sus ciclos de CPU reales robados de su máquina por un hipervisor y entregados a otra máquina. El robo de CPU solo es relevante en entornos virtualizados. Tuve ese problema exacto con micro instancias y que básicamente hizo que mi instancia fuera inutilizable durante aproximadamente 1 hora más o menos (hasta que mi tarea terminara ofc) si hacía tareas intensivas de CPU.Puede encontrar más información sobre este tema leyendo esta publicación en Greg's Ramblings . Aunque si tomas la palabra de Greg, esto debería estar sucediendo solo en micro instancias.
fuente